2017-08-14 75 views
1

我有一个maven项目,我写了一个java.util.logging过滤器,如下所示。java util日志配置属性文件中的筛选器

package com.xyz.filters; 

import java.util.logging.Filter; 
import java.util.logging.LogRecord; 

class CustomFilter implements Filter { 

public boolean isLoggable(LogRecord record) { 
    return record.getLoggerName().indexOf("com.package.name") != -1; 
} 
} 

我有一个属性文件中,我已经配置了控制台和文件处理程序,需要另外添加一个过滤器文件中摆脱不必要的日志。 我添加了以下过滤器:

java.util.logging.FileHandler.filter = com.xyz.filters.CustomFilter 

但是,该过滤器未应用。我在这里做错了什么。

UPDATE:添加配置文件

############################################################ 
# Default Logging Configuration File 
# 
# You can use a different file by specifying a filename 
# with the java.util.logging.config.file system property. 
# For example java -Djava.util.logging.config.file=myfile 
############################################################ 

############################################################ 
# Global properties 
# NOTE: this configuration file use to get the handler list, 
# Properties(except level property) define for each handler 
# may be not available because LogRecords handover to log4j 
# appenders in runtime. 
############################################################ 

# "handlers" specifies a comma separated list of log Handler 
# classes. These handlers will be installed during VM startup. 
# Note that these classes must be on the system classpath. 
# By default we only configure a ConsoleHandler, which will only 
# show messages at the INFO and above levels. 
#handlers= java.util.logging.ConsoleHandler 

# To also add the FileHandler, use the following line instead. 
#handlers= java.util.logging.FileHandler 
# Add org.wso2.carbon.bootstrap.logging.handlers.LogEventHandler to handlers if you need to push java logs to LOGEVENT appender 

handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler 

# Default global logging level. 
# This specifies which kinds of events are logged across 
# all loggers. For any given facility this global level 
# can be overriden by a facility specific level 
# Note that the ConsoleHandler also has a separate level 
# setting to limit messages printed to the console. 
.level= INFO 

############################################################ 
# Handler specific properties. 
# Describes specific configuration info for Handlers. 
# 

java.util.logging.FileHandler.level = FINE 
java.util.logging.FileHandler.pattern = /path/to/custom.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 
java.util.logging.SimpleFormatter.format = [%1$tY-%1$tm-%1$td %1$tk:%1$tM:%1$tS,%1$tL] %4$s {%2$s} - %5$s %6$s %n 
java.util.logging.FileHandler.filter = om.xyz.filters.CustomFilter 

java.util.logging.ConsoleHandler.level = INFO 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
############################################################ 

# For example, set the com.xyz.foo logger to only log SEVERE 
# messages: 
#com.xyz.foo.level = SEVERE 
com.package.name.level = FINE 
+0

如果'isLoggable()'方法'返回false',LogRecord不会被记录。如果方法'返回true','LogRecord'被转发给给定Logger的Handler。那你的情况如何? – soorapadman

+0

这是与所有记录相同的旧文件。我试图在isLoggable()方法中放置一个调试点,但它不会被击中。 –

+0

你可以尝试'return true'而不是'record.getLoggerName()。indexOf(“com.package.name”)!= -1'它是否正在工作?如果那个工作,那么它可能是'记录'的问题。 – soorapadman

回答

0

问题是缺少访问修饰符。

如果未使用访问修饰符指定类,则默认为仅在包中可见的private-package。因此,FileHandler将.filter属性读取为null。当它被更改为public过滤器被采取。更正的代码可以在下面找到。

public class CustomFilter implements Filter { 

public boolean isLoggable(LogRecord record) { 
    return record.getLoggerName().indexOf("com.package.name") != -1; 
} 
} 
0

这可能不是一个完整的回答你的问题,但在我看来,你正试图从一个无用的噪声滤除在Web应用程序的日志。我实际上编写了一个处理这个问题的开源库。您可以配置与您相关的软件包,该实用程序将非常巧妙地过滤掉堆栈跟踪,以便您仍然可以看到包含“由”导致的跟踪,但无用的软件包将被过滤掉。您可以将此库作为Maven工件(包括javadoc和源代码)或作为您可以自行修改的源代码。这里有一篇文章描述了该工具的功能以及从哪里获得它。 Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison。请参见段落“Stacktrace noise filter

相关问题