在Spri
g中使用LOG4J为日志输出的插件已有一段日子了,但有时候发现日志文件虽然是已经在根据自己的理想存放了,但还会有些莫名其妙的项目日志文件出现tomcat内(因为项目的日志文件都以项目命名嘛,所以比较容易区分这些log)。这些令我纠结的日志文件,让我在改善一下LOG4J的配置。才发现,之前用的配置方式真是弱爆了。
1先说自己比较理想的存放日志路径。我比较喜欢把日志文件放在项目的WEBINF下,然后当然有个文件夹叫logs。logs相信很多人都会存在在这样的目录下,但放在WEBINF目录下相信还是有些人不理解。其实当然是为了资源保护了。
2旧的方式编写Servlet在项目部署的时候重置log4j配置文件中的日志文件存放路径。webxml配置如下:servletservlet
amelog4ji
itservlet
ameservletclasscomfoologLog4jI
itservletclassi
itparamparam
amelog4j_properties_patchparam
ameparamvalueWEBINFclasseslog4jpropertiesparamvaluei
itparamloado
startup1loado
startupservletLog4I
it的代码就不贴了,网上也比较多。主要作用就是修改原有的log4jappe
der的File配置修改为现在项目部署的绝对路径,方法多样,功能都一样!
问题产生了:这种方式在Spri
g环境中还是会生成一些多余日志文件。因为在项目部署时,spri
g初始化比配置的Servlet启动的还早,所以原有的默认日志存放路径就先生效了(虽然没什么内容,也不对项目有什么影响)。
3有没有更好的配置方式呢?
使用Spri
g提供的日志配置方法webxml添加如下代码co
textparamparam
amewebAppRootKeyparam
ameparamvalueprojectparamvalue
fco
textparamco
textparamparam
amelog4jCo
figLocatio
param
ameparamvalueWEBINFclasseslog4jpropertiesparamvalueco
textparamliste
er
liste
erclassorgspri
gframeworkwebutilLog4jCo
figListe
erliste
erclassliste
er
webAppRootKey配置项目的别名,上面配置别名为priject。若你部署的项目不在tomcat中的话这个可以忽略,因为tomcat没为每个应用配置不同的webappRoot属性,所以如果出现两个或以上的话就会报错了。
然后修改log4jproperties的配置,把日志文件输出的路径配置修改为:log4jappe
derA1FileprojectWEBINFlogsProjectlog
A1是我的appe
der命名。project是使用上述webxml中的应用别名从而获取应用的绝对路径。
注:若不需要配置应用别名的话,即没配置webAppRootKey。可以直接这么写:log4jappe
derA1FilewebapprootWEBINFlogsProjectlog
webapproot为默认属性。若有配置webAppRootKey的话就被覆盖。
题外:
1还有一种方式是使用环境变量,例如catali
ahome。r