2017-08-14 74 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

相關問題