[英]Logging based on levels on log4j in Java
Below is the log4j properties and the Java code. 下面是log4j属性和Java代码。 All the logs are getting logged only in Debug. 所有日志仅在调试中记录。 I even tried with adding Threshold, no luck yet. 我什至尝试添加阈值,但还没有运气。 I need to log the log statements in a separate file based on log levels. 我需要根据日志级别将日志语句记录在单独的文件中。
All the logs are getting logged only in debug log file, and if I remove debug log, then it is getting logged in info log file. 所有日志仅记录在调试日志文件中,如果我删除调试日志,则它将记录在信息日志文件中。
Giving Threshold option also doesn't work. 提供阈值选项也不起作用。
log4j.rootLogger = OFF
#define the console appender
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
# now define the layout for the appender
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# now define the rollingFIle appender
log4j.category.com=error, myErrorappender
log4j.additivity.com=false
log4j.appender.myErrorappender=org.apache.log4j.RollingFileAppender
log4j.appender.myErrorappender.File=/Users/uthaman/Documents/workspace/Logging/myErrorlog.log
log4j.appender.myErrorappender.MaxFileSize=2MB
log4j.appender.myErrorappender.MaxBackupIndex=2
log4j.appender.myErrorappender.layout = org.apache.log4j.PatternLayout
log4j.appender.myErrorappender.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c (%F:%L) - %m%n
log4j.category.com=info,myInfoappender
log4j.additivity.com=false
log4j.appender.myInfoappender=org.apache.log4j.RollingFileAppender
log4j.appender.myInfoappender.File=/Users/user/Documents/workspace/Logging/myInfolog.log
log4j.appender.myInfoappender.MaxFileSize=2MB
log4j.appender.myInfoappender.MaxBackupIndex=2
log4j.appender.myInfoappender.layout = org.apache.log4j.PatternLayout
log4j.appender.myInfoappender.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c (%F:%L) - %m%n
log4j.category.com=debug,myDebugappender
log4j.additivity.com=false
log4j.appender.myDebugappender=org.apache.log4j.RollingFileAppender
log4j.appender.myDebugappender.File=/Users/user/Documents/workspace/Logging/myDebuglog.log
log4j.appender.myDebugappender.MaxFileSize=2MB
log4j.appender.myDebugappender.MaxBackupIndex=2
log4j.appender.myDebugappender.layout = org.apache.log4j.PatternLayout
log4j.appender.myDebugappender.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c (%F:%L) - %m%n
This is the java code where the log statements are logged: 这是记录日志语句的Java代码:
public class Logging {
private static Logger logger = Logger.getLogger(Logging.class);
public static void main(String[] args) {
logger.error("This is error");
logger.info("This is info");
logger.debug("This is debug");
}
}
I prefer using log4j.xml
configuration instead of the log4j.properties
. 我更喜欢使用log4j.xml
配置而不是log4j.properties
。 The following configuration (a basic one) works as desired... 以下配置(基本配置)可根据需要工作...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="log.info" />
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="threshold" value="info"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %C{6} - %m%n" />
</layout>
</appender>
<appender name="fileAppenderDebug" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="log.debug" />
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="threshold" value="debug"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %C{6} - %m%n" />
</layout>
</appender>
<appender name="fileAppenderError" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="log.error" />
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="threshold" value="error"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %C{6} - %m%n" />
</layout>
</appender>
<root>
<priority value="debug" />
<appender-ref ref="fileAppender" />
<appender-ref ref="fileAppenderDebug" />
<appender-ref ref="fileAppenderError" />
</root>
</log4j:configuration>
Problem: 问题:
You have defined duplicate key in the log4j configuration: 您已经在log4j配置中定义了重复键:
log4j.category.com=error, myErrorappender
log4j.additivity.com=false
log4j.category.com=info,myInfoappender
log4j.additivity.com=false
log4j.category.com=debug,myDebugappender
log4j.additivity.com=false
Solution: 解:
log4j.category.com=debug,myDebugappender,myInfoappender,myErrorappender
log4j.additivity.com=false
log4j.appender.myDebugappender.Threshold=DEBUG
log4j.appender.myInfoappender.Threshold=INFO
log4j.appender.myErrorappender.Threshold=ERROR
If you must filter events by exact level match: 如果必须按完全级别匹配来过滤事件:
log4j.appender.myDebugappender.filter=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.myDebugappender.filter.levelToMatch=DEBUG
...
You can try using filter
in your configuration file to specify a specific level
to written written to the appender
. 您可以尝试在配置文件中使用filter
来指定要写入到appender
的specific level
。 Please the sample code attached 请附上示例代码
<appender name="DEBUG" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%t] %-5p %c - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="DEBUG" />
<param name="levelMax" value="DEBUG" />
</filter>
</appender>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.