我想要做的是这样的:
<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");
..........
..........
}
但我没有看到任何效果。
是的log4j被调用之前配置的main
方法是什么?
是否有任何其他方式做到这一点?
看看这个线程
它看起来像你做的一切权利。 我不认为这是设置你的财产与主类里面有什么区别System.setProperty()
并通过命令行,只要它发生befor实际log4j的初始化指定它。
我觉得你的问题是,您所指定的属性之前您的日志框架被加载。 我可以说,当你调用配置器的日志框架(log4j的)将得到配置。 这样的东西BasicConfigurator.configure()
在你的情况下,它的XML配置器)。
否则,使用记录的第一次尝试将导致邮件像“log4j的配置不正确”。
真正的问题是,是否有“主”您的代码段是不是简单化。
考虑到这一点,另外一个问题,我不得不问 - 不管你是一些容器中运行,或者你正在运行一个真正的香草方法主要通过自己配置的一切吗? 我问,因为如果你在容器中运行,有机会,容器本身将莫名其妙地配置其日志记录,例如JBoss会这么做。 在这种情况下,更多的研究是必要的。
希望这可以帮助
系统属性可以作为$ {}的user.home,拿起从这里需要http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
例如:
<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>
您可以通过配置的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。 尝试
java -Derror_log_path=/test/crm/log/error.log
注:我不知道,如果点.
在那里工作,是使用下划线代替它_
。