我想这样做:
<appender name="ErrorLog" class="org.apache.log4j.FileAppender">
<param name="File" value="${error.log.path}"/>
<param name="Append" value="true" />
<param name="Threshold" value="ERROR"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%C{1} %L [%t] %d{dd MMM,yyyy HH:mm:ss.SSS} %-5p - %m%n" />
</layout>
</appender>
注意此行:<param name="File" value="${error.log.path}"/>
我试图设置这样的值:
public static void main(String[] args) {
System.setProperty("error.log.path", "/test/crm/log/error.log");
ApplicationContext context = new ClassPathXmlApplicationContext("blah.xml");
..........
..........
}
但是我没有看到任何效果。
在调用main
方法之前是否已配置log4j?
还有其他方法吗?
看来您做对了所有事情。我认为在主类中使用System.setProperty()
设置属性与通过命令行指定属性之间没有任何区别,只要它发生在实际的log4j初始化之前即可。
我认为您的问题是您的日志记录框架已加载
之前,您可以指定属性。我可以说在调用配置器时将配置日志记录框架(log4j)。像BasicConfigurator.configure()
之类的东西(在您的情况下为xml配置器)。
真正的问题是您的带有'main'的代码片段是否没有被简化。
考虑到这一点,我要问的另一个问题是,您是在某个容器中运行还是在运行真正的香草方法main并自行配置所有内容?我问是因为如果您在容器中运行,则很有可能容器将以某种方式自行配置其日志记录,例如JBoss会这样做。在这种情况下,需要进行更多调查。
希望这会有所帮助
示例:
<appender name="errorLog" class="com.qait.logger.IOPFileAppender">
<param name="Threshold" value="ERROR" />
<param name="File"
value="${user.home}/Harvestors/IOP Error Logs/error.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d%-5p [%c{1}] %m %n" />
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
FileAppender fa = new FileAppender();
fa.setFile("/test/crm/log/error.log");
fa.setLayout(new
PatternLayout("%C{1} %L [%t] %d{dd MMM,yyyy HH:mm:ss.SSS} %-5p - %m%n"));
fa.setThreshold(Level.ERROR);
fa.setAppend(true);
fa.activateOptions();
Logger.getRootLogger().addAppender(fa);
// similarly you can add all appenders.
// or just append file name alone
Logger log = Logger.getLogger(YourClass.class);
FileAppender appender = (FileAppender) log.getAppender("ErrorLog");
appender.setFile("appender");
java -Derror_log_path=/test/crm/log/error.log
[注意:我不确定点
.
是否在其中起作用,因此将其替换为下划线_
。
系统属性。格式为$ {sys:some.property}和$ {sys:some.property:-default_value}。