Java记录除一个以外的所有

时间:2014-01-23 23:19:01

标签: java logging

我有以下logging.properties文件:

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

java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

java.util.logging.FileHandler.pattern = /tmp/file.log
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.append = true 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$td.%1$tm.%1$tY %1$tH:%1$tM:%1$tS [%4$s] %5$s%6$s%n

fileclass = INFO, FileHandler

目前一切都进入控制台,加上'fileclass'包进入文件, 但我希望从控制台中排除'fileclass'包。 我可以定义主程序包去控制台,但主程序没有 有包裹。

是否可以在logging.properties中包含此类案例: - 一切都进入控制台,除了'fileclass'到文件

2 个答案:

答案 0 :(得分:1)

这可以通过几种方式完成。

假设您要保留默认的控制台处理程序。 您可以从全局处理程序列表中删除java.util.logging.FileHandler,从而为您提供以下内容:

handlers=java.util.logging.ConsoleHandler

这将导致所有应用程序都登录到控制台。为了完善您的案例,我们必须确保' fileclass'不会登录到控制台,但会记录到文件。

您可以通过编程方式或声明方式执行此操作:

<强>编程

在&#39;文件类&#39;应用程序。创建自定义记录器。 e.g。

Logger logger = Logger.getLogger(FileClass.class.getName());

// set logger level
logger.setLevel(Level.INFO);

FileHandler fileHandler = new FileHandler("file.log");

// Set the handler level
// NOTE: This setting will ignore INFO records sent by the logger
fileHandler.setLevel(Level.WARNING);
logger.addHandler(fileHandler);

现在您已手动添加了FileHandler。剩下要做的就是断开java.util.logging.ConsoleHandler与您的文件类的关联。您可以致电logger.removeHandler(consoleHandler)来执行此操作,其中consoleHandlerjava.util.logging.ConsoleHandler的实例

<强>以声明

您还可以声明性地添加文件处理程序并禁用父级和全局处理程序

# disable parents, e.g. in this case the console handler
com.some.package.useParentHandlers=false 

# add the file handler
com.some.package.logger.MyLogger.level=INFO
com.some.package.MyFileHandler.pattern=%h/CoolLog%g.log
com.some.package.handler.MyFileHandler.limit=20000000
com.some.package.handler.MyFileHandler.count=20

这将使您能够添加专门为该应用程序添加的文件句柄,但是由于它是全局声明的,因此它不会删除控制台处理程序。

您可能需要查看我在Java Logging上的博文:

答案 1 :(得分:1)

我没有使用Java Util Logger,但通常与记录器的“Additivity”有关。

实现你想要的方法是,将fileclass logger的可加性设置为false(这意味着不包括父appender / handlers的使用。然后只添加你想要的appender / handler fileclass < / p>

在Java Util Logging中控制可加性的方法是在配置中使用useParentHandlers。所以它看起来像:

fileclass.useParentHandlers=false
fileclass = INFO, FileHandler

通过这样做,fileclass logger不会继承其父级的处理程序,只会使用您为其设置的任何内容。

需要注意的一点是,因为记录器是分层的。因此,它会影响fileclass记录器及其所有子记录器。例如,如果您有一个名为fileclass.foo的记录器,它也将仅使用FileHandler,这可能是您想要的,也可能不是。