我在这个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
。
是否可以指定默认占位符值?
答案 0 :(得分:2)
没有。您需要提供写入日志文件的位置。
如果您需要在部署war的文件夹中生成日志,
<param name="file" value="../logs/logFile.log" />
将在您部署的文件夹中创建logfile
答案 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中使用静态字段初始化程序以常规方式创建记录器。