我正在尝试使用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日志记录吗?
由于 维杰
答案 0 :(得分:0)
LogManager支持任意配置代码。根据文件:
属性" config"。此属性旨在允许运行任意配置代码。该属性定义了一个以空格或逗号分隔的类名列表。将为每个命名类创建一个新实例。每个类的默认构造函数可以执行任意代码来更新日志记录配置,例如设置记录器级别,添加处理程序,添加过滤器等。
例如,您可以编译以下内容:
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
您还可以创建subclass or proxy handler来控制在运行时生成日志文件名的方式和时间。