Configuration 如何正确初始化log4j?
将log4j添加到应用程序后,每次执行应用程序时,我都会得到以下输出: log4j:WARN No appenders could be found for logger (slideselector.facedata.FaceDataParser). log4j:WARN Please initialize the log4j system properly. log4j:警告:找不到记录器(slideselector.facedata.FaceDataParser)的追加器。 log4j:警告请正确初始化log4j系统。 这似乎意味着配置文件丢失。 这个配置文件应该位于哪里?什么是好的开始内容Configuration 如何正确初始化log4j?,configuration,log4j,Configuration,Log4j,将log4j添加到应用程序后,每次执行应用程序时,我都会得到以下输出: log4j:WARN No appenders could be found for logger (slideselector.facedata.FaceDataParser). log4j:WARN Please initialize the log4j system properly. log4j:警告:找不到记录器(slideselector.facedata.FaceDataParser)的追加器。 log4j:警
我使用纯java开发桌面应用程序。因此没有Web服务器等。在线查找具有根appender的log4j.properties或log4j.xml,并将其放在类路径上
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
将登录到控制台。我更喜欢将日志记录到一个文件中,以便您可以在事后进行调查
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file
尽管对于详细日志应用程序,100KB通常需要增加到1MB或10MB,特别是对于调试
我个人设置了多个记录器,并将根记录器设置为警告或错误级别,而不是调试。您在开发什么?您正在使用ApacheTomcat吗
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n
我的Java应用程序中有这样的属性。
Log4j
默认情况下在类路径上查找名为Log4j.properties
或Log4j.xml
的文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
您可以通过如上所述设置系统属性(查看“默认初始化过程”部分),控制它使用哪个文件来初始化自身
例如:
java -Dlog4j.configuration=customName ....
Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages
将导致log4j
在类路径上查找名为customName的文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
如果您遇到问题,我发现打开log4j.debug很有帮助:
-Dlog4j.debug
它将向System.out打印出许多有用的信息,包括它用来初始化自身的文件、配置了哪些记录器/附加器以及如何配置等
配置文件可以是java属性文件或xml文件。以下是取自以下内容的属性文件格式示例:
虽然正确地设置log4j对于“真正”的项目非常有用,但您可能需要一个快速而肮脏的解决方案,例如,如果您只是在测试一个新的库 如果是,则调用静态方法
org.apache.log4j.BasicConfigurator.configure();
将设置控制台的基本日志记录,错误消息将消失。我的log4j已通过以下属性文件修复:
## direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=./logs/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file
如果你只是摆脱了一切(例如,如果你在测试中)
如果我们在log4j之上使用apachecommons日志包装器,那么我们需要在classpath中提供这两个jar。另外,
commons logging.properties
和log4j.properties/xml
应该在classpath中可用
我们还可以使用-Dorg.apache.commons.logging.Log=-Dlog4j.configuration=
将实现类和log4j.properties
名称作为JAVA_OPTS
传递。对于应用程序/web服务器,也可以通过设置JAVA_OPTS
来实现
它将有助于外部化可在部署中更改的属性。您可以使用设置日志级别 这些级别有助于轻松设置希望程序显示的信息类型 例如:
java -Dlog4j.configuration=customName ....
Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages
一组可能的级别包括:
跟踪
调试
信息
警告,
错误和
致命的
根据,您可以使用以下方法从java应用程序内部设置log4j.properties的位置:
org.apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties)
此处提供更多信息:要启用
-Dlog4j.debug
,请转到系统,高级系统设置,环境变量并将系统变量\u JAVA_OPTIONS
设置为-Dlog4j.debug
我在hibernate.cfg.xml文件旁边的resources文件夹中创建了文件log4j.properties,并用下面的文本填充了它:
log4j.rootLogger=INFO, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n
现在我消除了警告和错误如前所述,有两种方法 第一种方法是将这一行添加到主方法中:
BasicConfigurator.configure();
第二种方法是将此标准log4j.properties文件添加到类路径:
在采用第二种方法时,您需要确保正确初始化文件
例如
确保您创建了存储日志文件所需的文件夹。根据:
为什么我会看到关于“没有为记录器找到附加器”和“请正确配置log4j”的警告
当无法找到默认配置文件log4j.properties
和log4j.xml
且应用程序未执行显式配置时,会发生这种情况log4j
使用Thread.getContextClassLoader().getResource()
定位默认配置文件,而不直接检查文件系统。要知道放置log4j.properties或log4j.xml
的适当位置,需要了解正在使用的类加载器的搜索策略log4j
不提供默认配置,因为在某些环境中可能禁止向控制台或文件系统输出
基本上,logger的警告“找不到Appender”表示您正在使用日志系统,但您尚未将任何Appender(如FileAppender、ConsoleAppender、SocketAppender、SyslogAppender等)添加到配置文件中,或者配置文件丢失
配置log4j有三种方法:使用属性文件(log4j.properties
),使用和通过Java代码(rootLogger.addAppender(new NullAppender());
)
log4j.属性
如果存在属性文件(例如,在安装Solr时),则需要将此文件放在目录中
类路径
以下是Linux中如何确定类路径值的一些命令建议:
$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?
或者从Java:System.getProperty(“Java.class.path”)
log4jxml
以下是XML格式的log4j的基本XML配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
为什么log4j在J2EE或WAR应用程序中找不到我的属性文件 简短的回答是:log4j类和属性文件不在同一个类加载器的范围内 Log4j只使用默认的
Cl
public class Log4JSample {
public static void main(String[] args) {
Properties properties=new Properties();
properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile");
properties.setProperty("log4j.rootCategory","TRACE");
properties.setProperty("log4j.appender.stdout", "org.apache.log4j.ConsoleAppender");
properties.setProperty("log4j.appender.stdout.layout", "org.apache.log4j.PatternLayout");
properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");
properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender");
properties.setProperty("log4j.appender.MyFile.File", "my_example.log");
properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB");
properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1");
properties.setProperty("log4j.appender.MyFile.layout", "org.apache.log4j.PatternLayout");
properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");
PropertyConfigurator.configure(properties);
Logger logger = Logger.getLogger("MyFile");
logger.fatal("This is a FATAL message.");
logger.error("This is an ERROR message.");
logger.warn("This is a WARN message.");
logger.info("This is an INFO message.");
logger.debug("This is a DEBUG message.");
logger.trace("This is a TRACE message.");
}
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
import org.apache.log4j.BasicConfigurator;
BasicConfigurator.configure();
Configuration:
Properties:
Appenders:
Loggers:
Configutation:
name: Default
Properties:
Property:
name: log-path
value: "logs"
Appenders:
Console:
name: Console_Appender
target: SYSTEM_OUT
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
File:
name: File_Appender
fileName: ${log-path}/logfile.log
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
Loggers:
Root:
level: debug
AppenderRef:
- ref: Console_Appender
Logger:
- name: <package>.<subpackage>.<subsubpackage>.<...>
level: debug
AppenderRef:
- ref: File_Appender
level: error
org.apache.log4j.BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.WARN);
// set to Level.DEBUG for full, or Level.OFF..
<properties>
<slf4jVersion>1.7.28</slf4jVersion>
</properties>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4jVersion}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>${slf4jVersion}</version>
</dependency>