log4j - 如何以编程方式从记录中排除某些类

时间:2014-09-08 17:06:42

标签: java logging struts2 log4j

我正在为Log4J编写一个自定义套接字appender,它在运行时自行附加。我到目前为止的代码如下,

Logger rootLogger = Logger.getRootLogger();
SocketAppender socketAppender = new SocketAppender(server, port);
socketAppender.setReconnectionDelay(60000);
socketAppender.setThreshold(Level.DEBUG);
socketAppender.setName("server-socket");
rootLogger.addAppender(socketAppender);

服务器&端口定义正确。我正在使用Struts2,所以我从freemarker.beans和freemarker.cache这样的类中获取了无用日志(对我来说)的日志。如何从登录Socket Appender上面过滤这些类?

我尝试使用过滤器,但它似乎不起作用。如果有人能指出我正确的方向,那将是非常有帮助的。干杯!

1 个答案:

答案 0 :(得分:1)

嗯..我找到了答案..我错误地实现了Filter类。我没有发现DENY,而是发送了NEUTRAL。以下代码现在可以正常使用,

        SocketAppender socketAppender = new SocketAppender(server, port);
        socketAppender.setReconnectionDelay(60000);
        socketAppender.setThreshold(Level.DEBUG);
        socketAppender.setName("server-socket");
        socketAppender.addFilter(new Filter() {
            @Override
            public int decide(LoggingEvent loggingEvent)
            {
                if(ignoreLogsFromClasses.contains(loggingEvent.categoryName))
                {
                    return -1;
                }
                return 0;
            }
        });
        rootLogger.addAppender(socketAppender);

其中ignoreLogsFromClasses是一个包含要忽略的类的Set。