将根日志级别设置为不可用的自定义

时间:2017-10-17 05:09:35

标签: java tomcat logging log4j

我的要求是定义一个介于INFODEBUG之间的日志级别。换句话说,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

0 个答案:

没有答案