log4j使用整理材料(2)

三、log4j的配置实例

1.1.1           輸出目的地的示例

###############################################

# 配置根日志器,要求控制台、文件、文件回滚等

###############################################

log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true

###############################################

# 类型:輸出控制台的追加器的设置

# 名字:CONSOLE

###############################################

# 配置输出到控制台

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.Threshold=DEBUG

log4j.appender.CONSOLE.Target=System.out

# 设置布局

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

# 设置布局的具体属性

log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

###############################################

# 类型:輸出文件的追加器的设置

# 名字:FILE

###############################################

# 配置输出到文件

log4j.appender.FILE=org.apache.log4j.FileAppender

# 输出文件的路径,可以是绝对,也可以是相对的路径

# 通过工程配置输出路径

# log4j.appender.logfile.File=

# ${InforSuiteConsole.root}/WEB-INF/console.log

# 配置绝对输出路径

# log4j.appender.logfile.File=:/WEB-INF/console.log

# 配置相对输出路径

#  log4j.appender.A1.File = ../logs/SampleMessages.log

log4j.appender.FILE.File=file.log

log4j.appender.FILE.Append=false

# 设置布局

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

# 设置布局的具体属性

log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# Use this layout for LogFactor 5 analysis

###############################################

# 类型:文件回滚的追加器的设置

# 名字:ROLLING_FILE

###############################################

# 配置输出到文件

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.Threshold=ERROR

# 文件位置

log4j.appender.ROLLING_FILE.File=rolling.log

log4j.appender.ROLLING_FILE.Append=true

#文件大小

log4j.appender.ROLLING_FILE.MaxFileSize=10KB

#指定采用输出布局和输出格式

log4j.appender.ROLLING_FILE.MaxBackupIndex=1

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

log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

###############################################

# 类型:SOCKET的追加器的设置

# 名字:SOCKET

###############################################

#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
#SetupforLogFacter5 log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

#####################################################

# 类型:发送日志给邮件

# 名字:MAIL

#####################################################

# 发送日志给邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
###############################################

# 类型:用于数据库的

# 名字:DATABASE

###############################################
# 用于数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root log4j.appender.DATABASE.password=
log4j.appender.db.sql=INSERT INTO SS_LOG4J_LOG
(PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m')
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
###############################################

# 类型:自定义的appender

# 名字:im

###############################################
#自定义Appender
log4j.appender.im= net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

1.1.2           按时间和大小增加新日志文件

开发的B/S结构系统,在服务端一般要有日常运行的日志记录。保存成日志文件形式的时候,大家经常会遇到一个问题:日志文件过大。上百兆的日志文件对 查阅日志信息来说也是一个问题。所以我希望能够每天或每个月产生一个日志文件,这样文件不至于过大。 或者根据日志文件大小来判断,超过规定大小,日志自动增加新文件。
  在log4j中这两种方式的实现都很简单,只要在配置文件中设置即可。
   一、按照一定时间产生日志文件,配置文件如下:
   # Set root logger level to ERROR and its only appender to A1.
   log4j.rootLogger=ERROR,R
   # R is set to be a DailyRollingFileAppender.
   log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
   log4j.appender.R.File=backup.log
   log4j.appender.R.DatePattern = '.'yyyy-MM-dd
   log4j.appender.R.layout=org.apache.log4j.PatternLayout
     log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

 以上配置是每天产生一个备份文件。其中备份文件的名字叫backup.log www_bitscn_com

具体的效果是这样:当天的日志信息记录在backup.log文件中,前一天的记录在名称为  backup.log.yyyy-mm-dd 的文件中。

类似的,如果需要每月产生一个文件可以修改上面的配置:
    将
     log4j.appender.R.DatePattern = '.'yyyy-MM-dd
    改为
      log4j.appender.R.DatePattern = '.'yyyy-MM
  二、根据日志文件大小自动产生新日志文件
    配置文件内容如下:
  # Set root logger level to ERROR and its only appender to A1.

log4j.rootLogger=ERROR,R

# R is set to be a RollingFileAppender.

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=backup.log
  #log4j.appender.R.MaxFileSize=100KB
  # Keep one backup file
  log4j.appender.R.MaxBackupIndex=1
  log4j.appender.R.layout=org.apache.log4j.PatternLayout
   log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-ddHH:mm:ss} [%c]-[%p] %m%n
  其中:
  #日志文件的大小
  log4j.appender.R.MaxFileSize=100KB
  # 保存一个备份文件
  log4j.appender.R.MaxBackupIndex=1

1.1.3           log4j输出多个自定义日志文件

log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的log4j基础上稍加配置即可轻松实现这一功能。

先看一个常见的log4j.properties文件,它是在控制台和myweb.log文件中记录日志:

log4j.rootLogger=DEBUG, stdout, logfile

log4j.category.org.springframework=ERROR

log4j.category.org.apache=INFO

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

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

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.File=${myweb.root}/WEB-INF/log/myweb.log

log4j.appender.logfile.MaxFileSize=512KB

log4j.appender.logfile.MaxBackupIndex=5

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

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

如果想对不同的类输出不同的文件(cn.com.Test为例),先要在Test.java中定义:

private static Log logger = LogFactory.getLog(Test.class);

  然后在log4j.properties中加入:

log4j.logger.cn.com.Test= DEBUG, test

log4j.appender.test=org.apache.log4j.FileAppender

log4j.appender.test.File=${myweb.root}/WEB-INF/log/test.log

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

log4j.appender.test.layout.ConversionPattern=%d %p [%c] - %m%n

也就是让cn.com.Test中的logger使用log4j.appender.test所做的配置。

但是,如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义:

private static Log logger1 = LogFactory.getLog("myTest1");

private static Log logger2 = LogFactory.getLog("myTest2");

  然后在log4j.properties中加入:

log4j.logger.myTest1= DEBUG, test1

log4j.appender.test1=org.apache.log4j.FileAppender

log4j.appender.test1.File=${myweb.root}/WEB-INF/log/test1.log

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

log4j.appender.test1.layout.ConversionPattern=%d %p [%c] - %m%n

  

log4j.logger.myTest2= DEBUG, test2

log4j.appender.test2=org.apache.log4j.FileAppender

log4j.appender.test2.File=${myweb.root}/WEB-INF/log/test2.log

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

log4j.appender.test2.layout.ConversionPattern=%d %p [%c] - %m%n

也就是在用logger时给它一个自定义的名字(如这里的"myTest1"),然后在log4j.properties中做出相应配置即可。别忘了不同日志要使用不同的logger(如输出到test1.log的要用logger1.info("abc"))

还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:

log4j.additivity.myTest1 = false

它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方啦!注意这里的"myTest1"是你在程序中给logger起的那个自定义的名字!

如果你说,我只是不想同时输出这个日志到log4j.rootLogger所配置的logfile中,stdout里我还想同时输出呢!那也好办,把你的log4j.logger.myTest1 = DEBUG, test1改为下式就OK啦!

log4j.logger.myTest1=DEBUG, test1, stdout

1.1.4           SpringLog4j结合实现自定义日志输出目录

LOG4J输出日志到web目录的相对路径,必需添加系统变量,否则,项目中必须是在使用spring为了实现日志输出目录的动态配置,可使用spring的一个Servlet Listener,在Tomcat启动时把ROOT的绝对路径写到系统变量里,这样log4j的配置文件里就可以用${myApp.root}来表示刚刚设进去的系统变量,具体如下:

(1) web.xml中加入如下配置:可导入spring-web.jar

<!-- 将当前的应用root设置到系统变量中 -->
<context-param>
  
<param-name>webAppRootKey</param-name>
  
<param-value>myApp.root</param-value>
 
</context-param>

  <context-param>

<!—配置加载的logj的配置文件的路径 -->
  
<param-name>log4jConfigLocation</param-name>
  
<param-value>/WEB-INF/classes/log/log4j.properties</param-value>
 
</context-param>
<!—设置刷新时间,在配置文件修改后能及时更新 -->

   <context-param>
      
<param-name>log4jRefreshInterval</param-name>
      
<param-value>600000</param-value>
   
</context-param>  

<!—设置spring的监听器 -->

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

说明:Log4jConfigListener中的initLogging方法会将系统的ROOT的绝对路径设置到系统变量中,默认是设置到webapp.root,但是如果多个系统都用这个默认的变量就会覆盖了,因此在这里定义了myApp.root,防止与其他系统冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值