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

时间:2010-09-03 21:32:39

标签: java tomcat java.util.logging

我将logging.properties放在tomcat

的WEB-INF / classes目录中

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

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

5 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:6)

说到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=<pkg_name>.CustomAFileHandler, <pkg_name>.CustomBFileHandler, java.util.logging.ConsoleHandler

<pkg_name>.CustomAFileHandler.level=ALL
<pkg_name>.CustomAFileHandler.pattern=%h/A%u.log
<pkg_name>.CustomAFileHandler.limit=50000
<pkg_name>.CustomAFileHandler.count=1 
<pkg_name>.CustomAFileHandler.formatter=java.util.logging.SimpleFormatter


<pkg_name>.CustomBFileHandler.level=ALL
<pkg_name>.CustomBFileHandler.pattern=%h/B%u.log
<pkg_name>.CustomBFileHandler.limit=50000
<pkg_name>.CustomBFileHandler.count=1 
<pkg_name>.CustomBFileHandler.formatter=java.util.logging.SimpleFormatter
...

答案 2 :(得分:1)

使用具有不同参数的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"));
    }
}

答案 3 :(得分:0)

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

只需创建自定义文件处理程序;使用类似于&#34; java.util.logging.FileHandler&#34;。

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

答案 4 :(得分:0)

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

  

2.2更改配置

     

这是一个动态调整日志记录的小程序   配置将输出发送到特定文件并获得大量   关于袋熊的信息。模式&#34;%t&#34;系统是暂时的   。目录

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