Log4j默认占位符值

时间:2014-08-05 09:47:07

标签: java log4j

我在这个appender中使用log4j:

<appender name="fileAppenderRoot" class="org.apache.log4j.FileAppender">
    <param name="file" value="${log.location}/logFile.log" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
    </layout>
</appender>

如果我使用-Dlog.location=/path/to/logs启动服务器,log4j将登录/path/to/logs/logFile.log但如果我没有指定任何内容, log4j将无法附加/logFile.log

是否可以指定默认占位符值

3 个答案:

答案 0 :(得分:2)

没有。您需要提供写入日志文件的位置。

如果您需要在部署war的文件夹中生成日志,

<param name="file" value="../logs/logFile.log" />

将在您部署的文件夹中创建logfile

Read more here

答案 1 :(得分:0)

我知道这并没有直接回答你的问题,但我发现更好的解决方案是使用整个服务器特定的log4j配置文件。这允许基于每个服务器自定义特定记录器级别等。

WebLogic和GlassFish(可能还有其他服务器)都提供了在一个特定应用程序的类路径上放置额外文件的机制。您可以使用这些机制覆盖WAR中的默认log4j.xml。 WebLogic提供File Loading Overrides和GlassFish Application-Specific Class Loading

答案 2 :(得分:0)

最简单的方法是在代码中添加默认值

private static void configureLogger() {
    String logLocation = System.getProperty("log.location");
    if (logLocation == null) {
        System.setProperty("log.location", "/path/to/logs");
    }

    // if a logger is needed in the current class, create it after 

    log = Logger.getLogger(SomeClass.class);
}

您需要在使用记录器的所有代码之前添加此代码。例如,可以将其添加到启动Servlet中。请不要在这种Servlet中使用静态字段初始化程序以常规方式创建记录器。