log4j.xml配置方法详解
(2009-10-17 21:14:01)
标签:
杂谈 |
分类: Java技术 |
-
log4j 有两种配置方法,大家熟知的是properties文件但是最近的项目实施中,每次去用户那里装系统,都要苦恼于log文件放在不同位置,要改 property文件就要重打jar包,麻烦的紧。而如果采用 xml配置的方法,直接放在WEB-INFO下,要修改路径,很方便。查了些资料,终于把系统的log4j改成在xml中配置啦。
记一下记一下……嘿嘿
附:log4j的API http://logging.apache.org/log4j/docs/api/index.html
log4i.xml 文件- <?xml
version="1.0" encoding="GB2312" ?> -
<!DOCTYPE
log4j:configuration >SYSTEM "log4j.dtd" - <log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/"> -
<appender name="FILE" -
class="org.apache.log4j.RollingFileAppender"> -
<!--设置通道file和输出方式:org.apache.log4j.RollingFileAppender --> -
<paramname="File" value="D:/zhaotj/all.output.log" /><!-- 设置File参数:日志输出文件名 --> -
<paramname="Append" value="true" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --> -
<paramname="MaxBackupIndex" value="10" /> -
<layoutclass="org.apache.log4j.PatternLayout"> -
<paramname="ConversionPattern" value="%p (%c:%L)- %m%n" /><!-- 设置输出文件项目和格式 --> -
</layout> -
</appender> -
-
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> -
<!--设置监视器输出方式 --> -
<layoutclass="org.apache.log4j.PatternLayout"> -
<paramname="ConversionPattern" -
value="%-4r[%t] %-5p %c %x - %m%n" /> -
</layout> -
<!--滤镜设置输出的级别--> -
<filterclass="org.apache.log4j.varia.LevelRangeFilter"> -
<paramname="levelMin" value="info" /> -
<paramname="levelMax" value="info" /> -
<paramname="AcceptOnMatch" value="true" /> -
</filter> -
</appender> -
-
<root><!-- 设置接收所有输出的通道 --> -
<priorityvalue="info" /> -
<appender-refref="FILE" /><!-- 与前面的通道id相对应 --> -
<appender-refref="STDOUT" /> -
</root> -
- </log4j:configuration>
-
建好xml文件后 要写一个servlet类继承actionservlet,当工程初始化时自动加载xml配置文件
- package
com.asiainfo; - import
javax.servlet.ServletException; - import
org.apache.commons.logging.Log; - import
org.apache.commons.logging.LogFactory; - import
org.apache.log4j.xml.DOMConfigurator; - import
org.apache.struts.action.ActionServlet; -
- public
class ExtendedActionServlet extendsActionServlet { -
privateLog this.getClass().getName());log = LogFactory.getLog( -
-
publicExtendedActionServlet() {} -
-
publicvoid init() throwsServletException { -
log.info( -
"Initializing,My );MyActionServlet init this System's Const Variable" -
this.getServletConfig().getServletContext().getRealPath(String prefix = -
"/");//读取项目的路径 -
this.getServletConfig().getInitParameter("log4j");String file = -
//读取log4j相对路径 -
String filePath = prefix + file; -
//加载.xml文件DOMConfigurator.configure(filePath); -
"Initializing,log.info( end );My Init" -
super.init();//应用了struts,此方法不能省,ActionServlet覆盖了的此方法中有很多重要操作 -
} - }
-
我们可以看到 在此类中 用了相对路径来加载xml的方法,首先通过prefix 读取了项目的路径 然后再通过读取web.xml中的log4j变量,获得log4j.xml的相对路径 两者结合 就是他的绝对路径拉
最后在web.xml中配置action信息 就可以实现加载啦
web.xml-
<servlet> -
<servlet-name>action</servlet-name> -
<servlet-class> -
com.asiainfo.ExtendedActionServlet -
</servlet-class> -
<init-param> -
<param-name>config</param-name> -
<param-value>/WEB-INF/struts-config.xml</param-value> -
</init-param> -
-
<!-- tsExtend --> -
<init-param> -
<param-name>config/tsextend</param-name><!--设备检测子模块--> -
<param-value> -
/WEB-INF/tsextend/struts-config.xml -
</param-value> -
</init-param> -
<init-param> -
<param-name>log4j</param-name><!--log4j.xml的路径--> -
<param-value> -
/WEB-INF/log4j.xml -
</param-value> -
</init-param> -
<init-param> -
<param-name>info</param-name> -
<param-value>3</param-value> -
</init-param> -
<init-param> -
<param-name>detail</param-name> -
<param-value>3</param-value> -
</init-param> -
<load-on-startup>0</load-on-startup><!--设置当工程初始时便执行--> - </servlet>
-
- <servlet-mapping>
-
<servlet-name>action</servlet-name> -
<url-pattern>*.do</url-pattern> - </servlet-mapping>
- <?xml

加载中…