Log4j日志文件系统配置,从零到有

日志系统是作为服务器端程序的一个很重要的部分。

使用Java开发的服务端程序,一般都使用Log4j这个日志文件系统,今天花了一天的时间来研究这个玩意儿,总算勉强搞出了一个能用的原型来了。

一、首先,需要在工程中引入下面几个包。刚开始我只引入了1, 3, 4三个包,一直打不出日志,不管怎么改xml配置文件都是,头都搞大了,后面查了很多博文,才发现还需要另外2个。

1.commons-logging-1.1.1.jar

2.jcl-over-slf4j-1.7.5.jar

3.log4j-1.2.16.jar

4.slf4j-api-1.7.5.jar

5.slf4j-log4j12-1.7.5.jar  <---类似一个做桥接的作用,将slf4j 和log4j联系起来。在代码中我是用的slf4j的logger 和 slf4j的LoggerFactory.getLogger()。刚开始日志一直无法打到文件中,搞了好久,后来在一篇博文中看到,原来slf4j和log4j之间还需要一个桥接的。

这些都可以在maven的search中找到。


二、然后自己要在工程中写一个类,来加载和监控 log4j的配置文件。

有两个类:org.apache.log4j.xml.DOMConfigurator  <---- 监控xml格式的配置文件

               org.apache.log4j.PropertyConfigurator     <------监控 properties格式的配置文件。

我在工程中用的是xml格式的配置文件,所以就看这个文件。


由于是servlet的web应用,所以我在servlet中来完成这个加载工作

先写一个servlet, 在init()中完成配置文件的加载工作。

public class Log4jInitServlet extends HttpServlet

{

    public void init()

   {

     DOMConfigurator.configureAndWatch(configure_file_path,  watch_interval);  // 参数分别是配置文件的路径和动态监控配置文件改变的时间间隔。

   }

   public void doGet()

  {     // do nothing

  }

}


三、然后在servlet的web.xml中加上这个servlet,并且设置为启动时加载。当然,你也可以在工程代码的其他地方来加载,但是要保证在log工作的时候配置文件已经加载了。

<servlet>
    <servlet-name>log4j-init</servlet-name>
    <servlet-class>Log4jInitServlet </servlet-class>            
    <load-on-startup>1</load-on-startup>        
  </servlet>

这样jetty启动的时候,就会执行这个servlet,去加载log4j的配置文件了。


四、接下来写xml的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <!-- ========================== 自定义输出格式说明================================ -->
      <!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL -->
      <!-- %r 输出自应用启动到输出该log信息耗费的毫秒数  -->
      <!-- %c 输出所属的类目,通常就是所在类的全名 -->
      <!-- %t 输出产生该日志事件的线程名 -->
      <!-- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” -->
      <!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18>日 22:10:28,921  -->
      <!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)  -->

<!--详细的格式可以参考这里-->
      <!-- ========================================================================== -->


      <!-- ========================== 输出方式说明================================ -->
      <!-- Log4j提供的appender有以下几种:  -->
      <!-- org.apache.log4j.ConsoleAppender(控制台),  -->
      <!-- org.apache.log4j.FileAppender(文件),  -->
      <!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
      <!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  -->
      <!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   -->
  <!-- ========================================================================== -->

  <!-- 输出到日志文件  -->
    <appender name="FileDepender" class="org.apache.log4j.RollingFileAppender">            <--------- 定义一个appender后面的日志具体调用它
       <param name="File" value="/home/xxx/jetty/logs/xxx.log"/>                   <--------------------   下面这些参数都可以见名知意
       <param name="Append" value="true"/>
       <param name="MaxFileSize" value="10MB"/>
       <param name="MaxBackupIndex" value="10"/>
       <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="[%t] %d{yyyy-mm-dd,hh:mm:ss.SSS} %l [%p]  %m%n"/>
       </layout>
   
<!--       <filter class="org.apache.log4j.varia.LevelRangeFilter">  
           <param name="LevelMin" value="INFO"/>

           <param name="LevelMax" value="ERROR"/>  
       </filter>  -->
    </appender>

    <!--通过<category></category>的定义可以将各个包中的类日志输出到不同的日志文件中-->
  <!--  <category name="com.packagename">  
       <priority value="debug" />  
       <appender-ref ref="FileDepender" />  
     </category>  
    -->

    <root>
       <priority value="debug"/>
       <appender-ref ref="FileDepender"/>     <----------------   指向前面定义的appender,前面可以定义多个appender,这里也可以引用多个appender
    </root>
</log4j:configuration>


接着将项目打包,部署到环境上,运行起来后就会自动在指定的位置生成日志文件了。


For more details, see http://www.linuxso.com/architecture/26604.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值