gpt4 book ai didi

Java Logging - 如何将输出重定向到记录器的自定义日志文件?

转载 作者:IT老高 更新时间:2023-10-28 20:44:14 28 4
gpt4 key购买 nike

我对 jdk 日志记录配置有疑问。我有一个 EJB(部署到 glassfish),它使用 JDK Logging 来输出消息。因此,我使用带有如下代码的命名记录器:

private static Logger logger = Logger.getLogger("org.imixs.workflow");
.....
logger.fine(" some info...");
....

我知道我可以通过在 Glassfish 的 logging.properties 文件中添加以下行来为我的记录器配置日志级别:

.....
org.imixs.workflow.level=FINE

但是我怎样才能为我的记录器指定输出文件呢?我想将来自名为“org.imixs.workflow”的记录器的所有消息放入一个单独的文件中。这可能吗?

感谢您的帮助

最佳答案

FileHandler 的稍微令人困惑的模式属性可以用于此

handlers=java.util.logging.FileHandler
# Default global logging level.
.level=INFO

#logging level for the foo.bar package
foo.bar.level=CONFIG
java.util.logging.FileHandler.pattern=%h/java%u.log

模式由一个字符串组成,该字符串包含以下将在运行时替换的特殊组件:

"/"本地路径名分隔符

“%t”系统临时目录

“%h”“user.home”系统属性的值

"%g"区分旋转日志的世代数

"%u"解决冲突的唯一编号

“%%”转换为单个百分号“%”

如果你想记录到多个文件,那么你可以通过为多个命名记录器设置多个处理程序来做到这一点

#FileHandler for file1    
java.util.logging.FileHandler.pattern = logging_property_test.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

#FileHandler for file2
logging.FileHandler2.pattern = logging_property_test2.log
logging.FileHandler2.limit = 50000
FileHandler.count = 1
logging.FileHandler2.formatter = java.util.logging.SimpleFormatter


#setting handler for logger1
logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler

#setting handler for logger2
logging.PropertyTestingLogger2.handlers=logging.FileHandler2

如您所见,诀窍在于有一个 logging.FileHandler2,它是一个自定义类,除了扩展 FileHandler 之外什么都不做

package logging;

import java.io.IOException;
import java.util.logging.FileHandler;

public class FileHandler2 extends FileHandler {

public FileHandler2() throws IOException, SecurityException {
super();
}

}

背景:不幸的是,Java 的创建者并不期望任何人登录多个文件。如果您查看 java.util.logging.FileHandler 的源代码,您会发现,模式属性是由类名加载的:

public class FileHandler extends StreamHandler {

private String pattern;

private void configure() {

String cname = getClass().getName();
pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log");

关于Java Logging - 如何将输出重定向到记录器的自定义日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248899/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com