通过Java日志框架启用AWS SDK日志记录到自定义日志文件

时间:2014-12-16 08:46:11

标签: java logging amazon-web-services aws-sdk

我正在尝试使用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日志记录吗?

由于 维杰

1 个答案:

答案 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来控制在运行时生成日志文件名的方式和时间。