一直都是把log4j的日志文件位置设定成绝对路径,直到今天发现了一个更好的设置方法, 不论绝对路径还是相对webroot的路径都可以。。。
log4j的通常用法就是通过在其配置文件(xml或properties)中直接将输出文件写死,在很多情况下,这样做是非常简单而又有效的。但这样做的缺点是,如果想让这个web应用运行起来,必须要修改log4j的配置文件。比如struts2.x中log4j的配置,每个人都得按照自己的路径进行配置。这无疑增加了配置的复杂性。因此,在某些情况下,我们更希望日志文件默认就输出到web应用的某个目录里,比如如果想输出日志到webroot/logs/log.log中,这该如何实现呢?
在配置文件中(我是在properties文件中使用的,xml我未测试,理论上一样)使用${user.dir}类似的方式,这里变量必须是System.getPropertities里的变量。而我们则就是要利用这一点。首先在一个Listener里或高优先级、自启动的Servlet里获得应用的发布目录,这是很容易得到的,比如String home = servletContext.getRealPath("/");然后调用System.setPropertity("web_home",home),“web_home”名字可以随意。则log4j.properties里的配置为:log4j.appender.TRACE.File=${web_home}/logs/log.log.则日志会输出到web应用发布目录里的logs目录里。
本文介绍了一种在Log4j配置文件中灵活指定日志文件输出路径的方法,通过在启动时设置系统属性来指向web应用的根目录,从而避免了每次部署都需要手动修改配置文件的问题。
1260

被折叠的 条评论
为什么被折叠?



