我在 tomcat 的 WEB-INF/classes 目录中放置了一个 logging.properties
我想登录到两个不同的文件。例如:org.pkg1 转到一个文件,org.pkg2 转到一个单独的文件。
我可以配置一个文件,但不能配置两个。那可能吗?
我在 tomcat 的 WEB-INF/classes 目录中放置了一个 logging.properties
我想登录到两个不同的文件。例如:org.pkg1 转到一个文件,org.pkg2 转到一个单独的文件。
我可以配置一个文件,但不能配置两个。那可能吗?
我终于想通了。在 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
说到 logging.properties 配置,我没有发现任何机制可以使用多个附加程序。我做了对我有用的简单解决方法。
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
...
没有简单的方法可以使用具有不同参数的 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"
org/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 文件中执行此操作,因为无法实例化多个附加程序,但您可以通过编程方式执行此操作。也应该可以使用LoggerManager