tomcat日志配置之四Spring中配置Log4j

一、log4j常用布局

 

#log4j的配置文件

#配置根日志

#格式:log4j.rootLogger=级别,输出源1,输出源2......

    #其中级别有:DEBUG<INFO<WARN<ERROR<FATAL

    #特别注意:这里定义了高级别的日志则类中低级别的不会写入比此低的信息

    #输出源是:自定义的名字

log4j.rootLogger=INFO,FILE1,FILE2,FILE3

#配置输出源所对应的辅助类

#格式:log4j.appender.输出源=类名<类名可以不同形式>

log4j.appender.FILE1=org.apache.log4j.FileAppender

#指定文件名

log4j.appender.FILE1.File=e:/1.log

#指定布局方式(消息翻个如文件之后怎么布局)

log4j.appender.FILE1.layout=org.apache.log4j.SimpleLayout

#高级日志配置1

log4j.appender.FILE2=org.apache.log4j.FileAppender

log4j.appender.FILE2.File=e:/2.html

log4j.appender.FILE2.layout=org.apache.log4j.HTMLLayout

#高级日志配置2 自定义布局

log4j.appender.FILE3=org.apache.log4j.FileAppender

log4j.appender.FILE3.File=e:/3.log

log4j.appender.FILE3.layout=org.apache.log4j.PatternLayout

log4j.appender.FILE3.layout.conversionPattern=%t;%p;%c;%m;%d;%l;%n

====================================================================

   #常见的几种自定义日志

   #%t:线程名称

   #%p:日志级别

   #%c:日志消息所在类名   <常用>

   #%m:消息内容

   #%d:发生时间    <常用>

   #%l:行数     <常用>

   #%n:换行     <常用>

   #注:如果要显示中文,则需要转码native2ascii

%表示output输入

p表示level

c表示调用的类

m表示log时的信息

n表示回车

M表示输出log时的信息的那个方法

F表示输出log时的信息的那个文件名

L表示输出log时的信息所在类的行数

LOG4J中PatternLayout的布局参数

ConversionPattern参数的格式含义

格式名 含义

%c 输出日志信息所属的类的全名,可以在其后指定继承的层数,比如{2}输出到其父类,{3}输出到父类的父类。

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28

%M 输出日志信息所属的函数的名称、参数类型、返回类型。

%m 输出代码中指定的信息,如log(message)中的message

%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推。可以用%5p或者%-5p来强制输出5个字符,不足的在前面或者后面补充空格。

%r 输出自应用启动到输出该日志信息所耗费的毫秒数

%t 输出产生该日志事件的线程名

%f 输出日志信息所属的类的类名。(测试的结果似乎应该是%F,而且输出的是那个类的文件名)

%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行

   这个测试结果出入比较大。%L确实可以输出上面所说的行数。但是%l输出的却相当于%c.函数名(%F:%L)。

===========================================================================================

二、在Spring中配置Log4j

 

   Spring最擅长的,就是在别家的蛋糕上再加些cream,让你J2EE without Spring的时候心痒痒。

   log4j,可以有如下的cream:

   1. 动态的改变记录级别和策略,不需要重启Web应用,如《Effective Enterprise Java》所说。

    2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。

   3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。

   在web.xml 添加

    <!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root"-->   

    <context-param>

        <param-name>webAppRootKey</param-name>

        <param-value>ssh.root</param-value>

    </context-param>

    <context-param>

        <param-name>log4jConfigLocation</param-name>

        <param-value>WEB-INF/log4j.properties</param-value>

    </context-param>

    <context-param>

        <param-name>log4jRefreshInterval</param-name>

        <param-value>60000</param-value>

    </context-param>

    <listener>

        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

    </listener>

     在上文的配置里,Log4jConfigListener会去WEB-INF/log4j.propeties 读取配置文件;

     开一条watchdog线程每60秒扫描一下配置文件的变化;

     并把web目录的路径压入一个叫webapp.root的系统变量。

     然后,在log4j.properties 里就可以这样定义logfile位置

         log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log 

     如果有多个web应用,怕webapp.root变量重复,可以在context-param里定义webAppRootKey。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值