我的要求是定义一个介于INFO
和DEBUG
之间的日志级别。换句话说,INFO加上一些东西,但不到调试。需要在tomcat配置目录中的log4j.xml文件的根级别启用该级别。我做了以下事情:
将根日志级别设置为自定义 STAT ,如:
<root>
<priority value="STAT"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="LOGSTASH"/>
</root>
定义了日志级别类:
package com.log4j.logger;
import org.apache.log4j.Level;
/**
* @author shantha
*
*/
@SuppressWarnings("serial")
public class StatLogLevel extends Level {
public static final int STAT_INT = 15000;
public static final Level STAT = new StatLogLevel(STAT_INT, "STAT", 6);
public StatLogLevel(int level, String levelStr, int syslogEquivalent) {
super(level, levelStr, syslogEquivalent);
}
public static Level toLevel(String logArgument) {
if (logArgument != null && logArgument.toUpperCase().equals("STAT")) {
return STAT;
}
return (Level) toLevel(logArgument);
}
public static Level toLevel(int val) {
if (val == STAT_INT) {
return STAT;
}
return (Level) toLevel(val, Level.DEBUG);
}
public static Level toLevel(int val, Level defaultLevel) {
if (val == STAT_INT) {
return STAT;
}
return Level.toLevel(val, defaultLevel);
}
public static Level toLevel(String logArgument, Level defaultLevel) {
if (logArgument != null && logArgument.toUpperCase().equals("STAT")) {
return STAT;
}
return Level.toLevel(logArgument, defaultLevel);
}
}
在代码中,使用以下代码发送日志:
logger.log(StatLogLevel.STAT, "Custom log message");
还在log4j.xml中添加了一个条目:
<category name="stats">
<priority value="STAT" class="com.log4j.logger.StatLogLevel" />
<appender-ref ref="CONSOLE" />
</category>
我得到的结果是:
...
log4j: Level value for root is [STAT].
log4j: root level set to DEBUG
log4j: Adding appender named [CONSOLE] to category [root].
...
和打印所有调试消息。
感谢有人可以提供帮助。
环境 java 1.8 , tomcat 8.5.15 和 log4j-1.2.17.jar 。