我有以下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'到文件
答案 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)
来执行此操作,其中consoleHandler
是java.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
,这可能是您想要的,也可能不是。