1

我正在尝试使用 java.util.logging 框架而不是 log4j 来启用 Amazon Web Services SDK 日志记录。我设法让它工作,日志进入属性文件中 java.util.logging.FileHandler.pattern 指定的文件。

我的 log.properties 文件

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
handlers=java.util.logging.FileHandler
com.amazonaws.request.level=FINE
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.pattern=./javalog.log

我正在寻找的是一种在运行时设置文件名的方法。

我尝试了以下选项

选项 1:在属性文件中:设置以下 java.util.logging.FileHandler.pattern=${mylogfile}

然后在我的 java 程序的 main() 函数中,调用 System.setProperty("mylogfile", logName);

选项 2:从属性文件中删除“java.util.logging.FileHandler.pattern”行。

相反,调用 System.setProperty("java.util.logging.FileHandler.pattern", logName);

这两个选项都不起作用。

Ps:在 log4j 的情况下,选项 1 工作正常。

知道如何动态自定义 SDK 日志记录的日志文件吗?

谢谢维杰

4

1 回答 1

0

LogManager支持任意配置代码。根据文档:

属性“配置”。此属性旨在允许运行任意配置代码。该属性定义了一个空格或逗号分隔的类名列表。将为每个命名类创建一个新实例。每个类的默认构造函数可以执行任意代码来更新日志配置,例如设置日志级别、添加处理程序、添加过滤器等。

例如,您可以编译以下内容:

    package somepackage;
    public class Config {
        public Config() throws Exception {
            String pattern = System.getProperty("mylogfile", "javalog.log");
            FileHandler f = new FileHandler(pattern);
            Logger.getLogger("").addHandler(f);
        }
    }

然后使用以下配置文件安装它:

config=somepackage.Config
com.amazonaws.request.level=FINE

您还可以创建子类或代理处理程序来控制在运行时生成日志文件名的方式和时间。

于 2014-12-16T14:48:12.740 回答