java util logging.properties:如何记录到两个不同的文件

我将logging.properties放在tomcat的WEB-INF / classes目录中

我想记录两个不同的文件。 例如:org.pkg1转到一个文件,org.pkg2转到一个单独的文件。

我可以配置一个文件,但不能配置两个。 那可能吗?

我终于想通了。 在tomcat中,它们扩展了java util logging(“JULI”)以启用此function。 这是一个logging.properties文件,我放在WEB-INF目录中,最终完成了我以后的……:

handlers=1console.java.util.logging.ConsoleHandler, 2jsp.org.apache.juli.FileHandler, 3financials.org.apache.juli.FileHandler .handlers=1a.java.util.logging.ConsoleHandler jsp.level=ALL jsp.handlers=2jsp.org.apache.juli.FileHandler org.apache.jasper.level = FINE org.apache.jasper.handlers=2jsp.org.apache.juli.FileHandler org.apache.jsp.level = FINE org.apache.jsp.handlers=2jsp.org.apache.juli.FileHandler com.paypal.level=ALL com.paypal.handlers=3financials.org.apache.juli.FileHandler 3financials.org.apache.juli.FileHandler.level=ALL 3financials.org.apache.juli.FileHandler.directory=${catalina.base}/logs 3financials.org.apache.juli.FileHandler.prefix=financials. 2jsp.org.apache.juli.FileHandler.level=ALL 2jsp.org.apache.juli.FileHandler.directory=${catalina.base}/logs 2jsp.org.apache.juli.FileHandler.prefix=jsp. 1console.java.util.logging.ConsoleHandler.level=FINE 1console.java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 

说到logging.properties配置,我没有找到任何机制来使用更多的一个appender。 我做了一个适合我的简单解决方法。

 public class CustomAFileHandler extends FileHandler { public DebugFileHandler() throws IOException, SecurityException { super(); } } public class CustomBFileHandler extends FileHandler { public DebugFileHandler() throws IOException, SecurityException { super(); } } 

还有我的logging.properties

 ... handlers=.CustomAFileHandler, .CustomBFileHandler, java.util.logging.ConsoleHandler .CustomAFileHandler.level=ALL .CustomAFileHandler.pattern=%h/A%u.log .CustomAFileHandler.limit=50000 .CustomAFileHandler.count=1 .CustomAFileHandler.formatter=java.util.logging.SimpleFormatter .CustomBFileHandler.level=ALL .CustomBFileHandler.pattern=%h/B%u.log .CustomBFileHandler.limit=50000 .CustomBFileHandler.count=1 .CustomBFileHandler.formatter=java.util.logging.SimpleFormatter ... 

使用具有不同参数的java.util.logging类获取两个相同类型的处理程序并不容易。 可能最简单的方法是在logging.properties中创建一个FileHandler子类,它传递相应的参数以启用日志记录,例如:

 org.pkg1.handlers=java.util.logging.FileHandler org.pkg2.handlers=org.pkg2.FileHandler java.util.logging.FileHandler.pattern="org_pkg1_%u.%g.log" org.pkg2.FileHandler.pattern="org_pkg2_%u.%g.log" 

组织/ pkg2的/ FileHandler.java:

 package org.pkg2; import java.util.logging.*; public class FileHandler extends java.util.logging.FileHandler { public FileHandler() { super(LogManager.getLogManager().getProperty("org.pkg2.FileHandler.pattern")); } } 

也可以使用纯jdk(尝试使用jdk 7或jdk 8)。

只需创建自定义文件处理程 使用类似于“java.util.logging.FileHandler”的。

 public class JULTestingFileHandler extends FileHandler { public JULTestingFileHandler() throws IOException, SecurityException { super(); } } 

用户属性文件;

 com.xxx.handlers = com.xxx.JULXXXFileHandler com.xxx.JULXXXFileHandler.pattern = ./logs/test1_test2.%u.%g.log 

我自己与java.util.logging有同样的问题,并且对给定的答案不太满意,我刚刚在文档中找到:

2.2更改配置

这是一个小程序,可以动态调整日志记录配置,将输出发送到特定文件,并获取有关袋熊的大量信息。 模式“%t”表示系统临时目录。

 public static void main(String[] args) { Handler fh = new FileHandler("%t/wombat.log"); Logger.getLogger("").addHandler(fh); Logger.getLogger("com.wombat").setLevel(Level.FINEST); ... } 

所以,似乎你不能仅仅从.properties文件中做到这一点,因为无法实例化几个appender,但你可以通过编程方式完成。 也应该可以使用LoggerManager