如何正确初始化log4j?
将 log4j 添加到我的应用程序后,每次执行应用程序时都会得到以下输出:
log4j:WARN No appenders could be found for logger (slideselector.facedata.FaceDataParser). log4j:WARN Please initialize the log4j system properly.
这似乎意味着配置文件丢失。 该配置文件应该位于哪里以及什么是好的开始内容?
我正在使用纯 java 来开发桌面应用程序。 所以没有网络服务器等...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(24)
您可以使用以下方法从 Java 应用程序内部设置 log4j.properties 的位置:
更多信息可在此处获取:https://logging.apache.org/log4j/1.2/manual.html
You can set the location of your log4j.properties from inside your java app by using:
More information is available here: https://logging.apache.org/log4j/1.2/manual.html
另一种不将属性文件放在类路径上的方法是直接从 java 代码设置属性。 这是示例代码。
}
Another way to do it without putting the property file on the classpath, is to set the property from the java code directly. Here is the sample code.
}
您可以使用 setLevel()。
这些级别可用于轻松设置您希望程序显示的信息类型。
例如:
可能的级别集是:
根据日志服务手册
You can set up the log level by using setLevel().
The levels are useful to easily set the kind of informations you want the program to display.
For example:
The set of possible levels are:
According to Logging Services manual
要启用
-Dlog4j.debug
,我转到系统、高级系统设置、环境变量,并将系统变量_JAVA_OPTIONS
设置为-Dlog4j .debug
。To enable
-Dlog4j.debug
, I go to System, Advanced system settings, Environment variables and set system variable_JAVA_OPTIONS
to-Dlog4j.debug
.简单地,在 src/main/ assembly 文件夹下创建 log4j.properties 。 根据您希望日志消息显示在控制台还是文件中,您可以修改文件。 以下将在控制台中显示您的消息。
Simply, create log4j.properties under src/main/assembly folder. Depending on if you want log messages to be shown in the console or in the file you modify your file. The following is going to show your messages in the console.
你正在开发什么? 您使用的是 Apache Tomcat 吗?
我的 Java 应用程序中有这样的属性。
What are you developing in? Are you using Apache Tomcat?
I have a properties like this in a Java app of mine.
我在 hibernate.cfg.xml 文件旁边的 resources 文件夹中创建了文件 log4j.properties 并用下面的文本填充它:
现在我得到了消除警告和错误
I've created file log4j.properties in resources folder next to hibernate.cfg.xml file and filled it with text below:
now I got rid of warnings and errors
我的 log4j 通过以下属性文件修复:
My log4j got fixed by below property file:
如前所述,有两种方法。
第一种方法是将这一行添加到您的 main 方法中:
第二种方法是将这个标准 log4j.properties 文件添加到您的类路径中:
在采用第二种方法时,您需要确保正确初始化该文件。
例如。
确保创建所需的文件夹来存储日志文件。
As explained earlier there are 2 approaches
First one is to just add this line to your main method:
Second approach is to add this standard log4j.properties file to your classpath:
While taking second approach you need to make sure you initialize the file properly.
Eg.
Make sure you create required folder to store log files.
尝试将 log4j:configuration 节点中的调试属性设置为 true。
当配置文件被读取并用于配置 log4j 环境时,它会打印出信息。 您可能会获得更多详细信息来解决您的问题。
Try to set debug attribut in log4j:configuration node to true.
It prints out information as the configuration file is read and used to configure the log4j environment. You may be got more details to resolve your problem.
日志记录 API - Java 日志 API 通过生成适合最终用户、系统管理员、现场服务工程师和软件开发团队分析的日志报告,促进客户站点的软件服务和维护。 日志记录 API 捕获应用程序或平台中的安全故障、配置错误、性能瓶颈和/或错误等信息。 核心包包括对将纯文本或 XML 格式的日志记录传送到内存、输出流、控制台、文件和套接字的支持。 此外,日志记录 API 能够与主机操作系统上已存在的日志记录服务进行交互。
包 java.util.logging « 提供 Java 平台核心日志记录工具的类和接口。
Log4j 1.x « log4j 是一种流行的基于 Java 的日志记录实用程序。 Log4j 是一个基于许多作者工作的开源项目。 它允许开发人员通过使用 Appender [控制台、文件、数据库和电子邮件] 来控制将哪些日志语句输出到各个位置。 它可以在运行时使用外部配置文件进行完全配置。
配置文件可以用 XML 或 Java 属性(键=值)格式编写。
表
logdata
的 MySQL 表结构Logging API - The Java Logging API facilitates software servicing and maintenance at customer sites by producing log reports suitable for analysis by end users, system administrators, field service engineers, and software development teams. The Logging APIs capture information such as security failures, configuration errors, performance bottlenecks, and/or bugs in the application or platform. The core package includes support for delivering plain text or XML formatted log records to memory, output streams, consoles, files, and sockets. In addition, the logging APIs are capable of interacting with logging services that already exist on the host operating system.
Package java.util.logging « Provides the classes and interfaces of the Java platform's core logging facilities.
Log4j 1.x « log4j is a popular Java-based logging utility. Log4j is an open source project based on the work of many authors. It allows the developer to control which log statements are output to a variety of locations by using Appenders [console, files, DB and email]. It is fully configurable at runtime using external configuration files.
Configuration files can be written in XML or in Java properties (key=value) format.
MySQL Table structure for table
logdata
对于测试,一种快速肮脏的方法包括设置日志级别:
For testing, a quick-dirty way including setting log level:
对我来说,解决方法是将“log4j.properties”放入“src”文件夹中。
The fix for me was to put "log4j.properties" into the "src" folder.
如果我们在 log4j 之上使用 apache commons 日志包装器,那么我们需要在类路径中提供这两个 jar。 此外,commons-logging.properties 和 log4j.properties/xml 应该在类路径中可用。
我们还可以使用
-Dorg.apache.commons.logging.Log= 将实现类和
。 对于应用程序/Web 服务器,可以通过设置 JAVA_OPTS 来完成相同的操作。log4j.properties
名称作为JAVA_OPTS
传递。 -Dlog4j.configuration=<文件:log4j.properties/xml 文件的位置>它将有助于外部化可以在部署中更改的属性。
If we are using apache commons logging wrapper on top of log4j, then we need to have both the jars available in classpath. Also,
commons-logging.properties
andlog4j.properties/xml
should be available in classpath.We can also pass implementation class and
log4j.properties
name asJAVA_OPTS
either using-Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>
. Same can be done via settingJAVA_OPTS
in case of app/web server.It will help to externalize properties which can be changed in deployment.
替代方法
这是使用 .yaml逻辑结构的
:示例:
参考: LOG4J 2 配置:使用 YAML
This is an alternative way using .yaml
Logic Structure:
Sample:
Ref: LOG4J 2 CONFIGURATION: USING YAML
Maven 解决方案:
我遇到了与上面相同的问题,对于 Maven 解决方案,我使用了 2 个依赖项。 如果您希望一个简单的项目使用具有标准配置的记录器,则此配置仅用于快速测试。 我可以想象,如果您需要更多信息和/或微调您自己的日志记录级别,您稍后会想要创建一个配置文件。
Maven solution:
I came across all the same issues as above, and for a maven solution I used 2 dependencies. This configuration is only meant for quick testing if you want a simple project to be using a logger, with a standard configuration. I can imagine you want to make a configuration file later on if you need more information and or finetune your own logging levels.
我刚刚这样做了,问题就解决了。
遵循以下博客
https://intellij-support.jetbrains.com/hc/en-us/community/posts/206875685-How-to-fix-log4j- WARN-console-messages-when-running-an-Application-inside-IntelliJ-Idea
但他在这里说如下
要解决此问题,只需将以下 log4j.resources 文件输入到您的 main/resources 文件夹中项目
而不是创建 log4j.resources,而是创建 log4j.properties。 右键单击 IntelliJ 中的资源 -> 新-> 资源包 - 只需将其命名为 log4j
I just did this and the issue was fixed.
Followed the below blog
https://intellij-support.jetbrains.com/hc/en-us/community/posts/206875685-How-to-fix-log4j-WARN-console-messages-when-running-an-Application-inside-IntelliJ-Idea
But here he says like below
To fix that just enter the following log4j.resources file into main/resources folder of your project
instead of creating log4j.resources, create log4j.properties. Right Click on Resource in IntelliJ -> New -> Resource Bundle - Just name it as log4j
如果即使在资源测试文件夹中添加
log4j.properties
或log4j.xml
文件后,Intellij IDEA 仍出现此错误,则可能 Intellij IDEA 尚未意识到文件的存在。因此,添加文件后,右键单击该文件并选择重新编译 log4j.xml。
If you are having this error on Intellij IDEA even after adding the
log4j.properties
orlog4j.xml
file on your resources test folder, maybe the Intellij IDEA is not aware yet about the existence of the file.So, after add the file, right click on the file and choose Recompile log4j.xml.
Log4j
默认情况下会在类路径中查找名为log4j.properties
或log4j.xml
的文件。您可以通过设置系统属性来控制它使用哪个文件来初始化自身,如此处所述(查找“默认初始化过程”部分)。
例如:
将导致
log4j
在类路径上查找名为 customName 的文件。如果您遇到问题,我发现打开 log4j.debug 很有帮助:
它将向 System.out 打印许多有用的信息,包括用于初始化自身的文件、配置了哪些记录器/附加程序以及如何配置等
。可以是 java 属性文件或 xml 文件。 以下是取自log4j 介绍文档页面的属性文件格式示例:
Log4j
by default looks for a file calledlog4j.properties
orlog4j.xml
on the classpath.You can control which file it uses to initialize itself by setting system properties as described here (Look for the "Default Initialization Procedure" section).
For example:
Will cause
log4j
to look for a file called customName on the classpath.If you are having problems I find it helpful to turn on the log4j.debug:
It will print to System.out lots of helpful information about which file it used to initialize itself, which loggers / appenders got configured and how etc.
The configuration file can be a java properties file or an xml file. Here is a sample of the properties file format taken from the log4j intro documentation page:
虽然正确设置 log4j 对于“真实”项目非常有用,但您可能需要一个快速而肮脏的解决方案,例如,如果您只是测试一个新库。
如果是这样,对静态方法的调用
将设置控制台的基本日志记录,并且错误消息将消失。
While setting up log4j properly is great for "real" projects you might want a quick-and-dirty solution, e.g. if you're just testing a new library.
If so a call to the static method
will setup basic logging to the console, and the error messages will be gone.
如果你只是摆脱一切(例如,如果你正在测试)
If you just get rid of everything (e.g. if you are in tests)
根据 Apache Log4j 常见问题页面:
基本上警告 无法找到记录器的附加程序 意味着您正在使用
log4j
日志系统,但您尚未在配置文件中添加任何 Appender(例如 FileAppender、ConsoleAppender、SocketAppender、SyslogAppender 等)或配置文件丢失。配置 log4j 的方法有三种:使用属性文件 (
log4j.properties
)、使用 XML 文件 和通过 Java 代码 (rootLogger.addAppender(new NullAppender());
)。log4j.properties
如果您有属性文件(例如安装 Solr 时),则需要将此文件放在 类路径 目录。
类路径
以下是 Linux 中如何确定类路径值的一些命令建议:
或者从 Java 中:
System.getProperty("java.class.path")
。Log4j XML
下面是 XML 格式的 log4j 的基本 XML 配置文件:
Tomcat
如果您使用 Tomcat,则可以将
log4j.properties
放入:/usr/share/tomcat?/ lib/
或/var/lib/tomcat?/webapps/*/WEB-INF/lib/
文件夹。Solr
作为参考,Solr 默认
log4j.properties
文件如下所示:Why can't log4j find myproperties file in a J2EE or WAR application?
另请参阅:
As per Apache Log4j FAQ page:
Basically the warning No appenders could be found for logger means that you're using
log4j
logging system, but you haven't added any Appenders (such as FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, etc.) into your configuration file or the configuration file is missing.There are three ways to configure log4j: with a properties file (
log4j.properties
), with an XML file and through Java code (rootLogger.addAppender(new NullAppender());
).log4j.properties
If you've property file present (e.g. when installing Solr), you need to place this file within your classpath directory.
classpath
Here are some command suggestions in Linux how to determine your classpath value:
or from Java:
System.getProperty("java.class.path")
.Log4j XML
Below is a basic XML configuration file for log4j in XML format:
Tomcat
If you're using Tomcat, you may place your
log4j.properties
into:/usr/share/tomcat?/lib/
or/var/lib/tomcat?/webapps/*/WEB-INF/lib/
folder.Solr
For the reference, Solr default
log4j.properties
file looks like:Why can't log4j find my properties file in a J2EE or WAR application?
See also:
在线查找具有根附加程序的 log4j.properties 或 log4j.xml,并将其放在类路径中。
将登录到控制台。 我更喜欢记录到文件中,以便您事后可以进行调查。
尽管对于详细的日志记录应用程序,100KB 通常需要增加到 1MB 或 10MB,特别是对于调试而言。
我个人设置了多个记录器,并将根记录器设置为警告或错误级别而不是调试。
Find a log4j.properties or log4j.xml online that has a root appender, and put it on your classpath.
will log to the console. I prefer logging to a file so you can investigate afterwards.
although for verbose logging applications 100KB usually needs to be increased to 1MB or 10MB, especially for debug.
Personally I set up multiple loggers, and set the root logger to warn or error level instead of debug.