搜集的最全面的的有关log4j日记的应用

来源:互联网 发布:互盾数据恢复注册机 编辑:程序博客网 时间:2024/05/20 07:36

Log4j由

Logger - 日志写出器,供程序员输出日志信息 
Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去 
1.ConsoleAppender选项                    

Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
2.FileAppender 选项
 Threshold=WARN:指定日志消息的输出最低层次。
 ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
 File=mylog.txt:指定消息输出到mylog.txt文件。
 Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
3.DailyRollingFileAppender 选项
  Threshold=WARN:指定日志消息的输出最低层次。
  ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
  File=mylog.txt:指定消息输出到mylog.txt文件。
  Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
  DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
                    1)'.'yyyy-MM: 每月
                    2)'.'yyyy-ww: 每周 
                    3)'.'yyyy-MM-dd: 每天
                    4)'.'yyyy-MM-dd-a: 每天两次
                    5)'.'yyyy-MM-dd-HH: 每小时
                    6)'.'yyyy-MM-dd-HH-mm: 每分钟
 4.RollingFileAppender 选项
   Threshold=WARN:指定日志消息的输出最低层次。
   ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
   File=mylog.txt:指定消息输出到mylog.txt文件。
   Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
   MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
   MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

实际应用:
  log4j.appender.A1=org.apache.log4j.ConsoleAppender //这里指定了日志输出的第一个位置A1是控制台ConsoleAppender

 

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


Layout - 日志格式化器,用来把程序员的logging request格式化成字符串 

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

参数如下:

   %c 输出日志信息所属的类的全名 
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 
%f 输出日志信息所属的类的类名 
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行 
%m 输出代码中指定的信息,如log(message)中的message 
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” 
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推 
%r 输出自应用启动到输出该日志信息所耗费的毫秒数 
%t 输出产生该日志事件的线程名

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。


org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

在代码中使用Log4j  

  1.得到记录器 

  使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

  public static Logger getLogger( String name)

  通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

  static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

  2.读取配置文件 

  当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:

一般应用中:
  BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。

  也可以直接使用记录器
  PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
  DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

Web应用中:

Web.xml中配置:

<context-param>

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

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

</context-param>

 

<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>WEB-INF/log4j.properties</param-value>//如果服务器是tomcat的话log4j.properties要改名,因为与tomcat的log4j重名
    </context-param>

    <context-param>
        <param-name>log4jRefreshInterval</param-name>//开启间隔扫描,动态配置log4j,这样就不用每次修改log4j配置文件,都要进行服务器重启
        <param-value>60000</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>//spring中使用1. 动态的改变记录级别和策略,不需要重启Web应用,如《Effective Enterprise Java》所说。 

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

因为 系统把web目录的路径压入一个叫webapp.root的系统变量。这样写log文件路径时不用写绝对路径了. 

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

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

4.log4jRefreshInterval为6000表示 开一条watchdog线程每6秒扫描一下配置文件的变化; 

项目部署应用需知:其实需要注意的地方就是应用服务器下有不止一个的应用在使用spring的Log4jConfigListener需要修改web环境中webAppRootKey值(这个值其实是web应用的根目录在环境变量名,这样在log4j配置文件中如果有相对web目录的路径就不用写死了)。 

否则两个默认值web.root在环境变量中就会有冲突导致第二个应用启动失败。

Spring的监听器应该放在spring的日记监听的后面

    在tomcat启动是默认去找 log4j.properties,但此时Listener还没有起来,tomcat就要往\WEB-INF\logs\abc.log 写日志就找不到了,所以有时候要改log4j.properties这个文件

    </listener> 



  3.插入记录信息(格式化日志信息) 

  当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:

  Logger.debug ( Object message ) ;
  Logger.info ( Object message ) ;
  Logger.warn ( Object message ) ;
  Logger.error ( Object message ) ;

  4.web中使用:

   

 

 

常用的应用(采用log4j.properties的方式):

LOG4J的配置之简单使它遍及于越来越多的应用中了:Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了,

log4j.properties:

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

 # 应用于控制台

 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

 #应用于文件

 log4j.appender.FILE=org.apache.log4j.FileAppender
 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

 # 应用于文件回滚

 log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
 log4j.appender.ROLLING_FILE.Threshold=ERROR
 log4j.appender.ROLLING_FILE.File=rolling.log  //文件位置,也可以用变量${java.home}、rolling.log
 log4j.appender.ROLLING_FILE.Append=true       //true:添加  false:覆盖
 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
 log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
 log4j.appender.SOCKET.RemoteHost=localhost
 log4j.appender.SOCKET.Port=5001
 log4j.appender.SOCKET.LocationInfo=true
 # Set up for Log Facter 5
 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

 # 发送日志给邮件

 log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
 log4j.appender.MAIL.Threshold=FATAL
 log4j.appender.MAIL.BufferSize=10
www.wuset.com">log4j.appender.MAIL.From=web@www.wuset.com
 log4j.appender.MAIL.SMTPHost=www.wusetu.com
 log4j.appender.MAIL.Subject=Log4J Message
www.wusetu.com">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

 # 用于数据库
 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.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
 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

 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

 

#log4j在企业级中的应用,让指定的包输出,各个分层的日记归类

#log4j.rootCategory = INFO,R,R1//这是根设置

#log4j.logger.DAO = INFO,R,R1

#//用这可以给dao,service分层

log4j.logger.cn.dk.test1 = info,R,R1 

log4j.logger.cn.dk.test2 = info,R2,R3 

 

log4j.appender.R = org.apache.log4j.ConsoleAppender

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

#log4j.appender.D.Threshold = ERROR 只输出ERROR级别以上的日志!!!

#log4j.appender.file.MaxBackupIndex=2 #设置备份文件的最大数目为2个文件

log4j.appender.R.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH:mm:ss} [%t-%r] %nClassMessage:%l%nMessage:%m%n

 

log4j.appender.R1 = org.apache.log4j.DailyRollingFileAppender 

log4j.appender.R1.file = ./log/DAO/daolog

log4j.appender.R1.Append = false

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

log4j.appender.R1.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH:mm:ss} [%t-%r] %l%nMessage:%m%n

 

 

log4j.appender.R2 = org.apache.log4j.ConsoleAppender

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

#log4j.appender.D.Threshold = ERROR 只输出ERROR级别以上的日志!!!

#log4j.appender.file.MaxBackupIndex=2 #设置备份文件的最大数目为2个文件

log4j.appender.R2.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH:mm:ss} [%t-%r] %nClassMessage:%l%nMessage:%m%n

 

log4j.appender.R3 = org.apache.log4j.DailyRollingFileAppender 

log4j.appender.R3.file = ./log/Service/servicelog

log4j.appender.R3.Append = false

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

log4j.appender.R3.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd-HH:mm:ss} [%t-%r] %l%nMessage:%m%n

log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 

  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 

    <param name="Target" value="System.out"/> 

    <layout class="org.apache.log4j.PatternLayout"> 

      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 

    </layout> 

  </appender> 

  <appender name="action" class="org.apache.log4j.RollingFileAppender">

  <param name="File" value="./log/Actionlog"/>

  <param name="Append" value="true" />  

   <layout class="org.apache.log4j.PatternLayout">  

            <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />  

     </layout> 

  </appender>

  <logger name="cn.dk"><!-- 这里可以指定包范围 -->

     <level value="all" />

     <appender-ref ref="action"/>

     <appender-ref ref="console"/>

  </logger>

</log4j:configuration>

 

这种使用得比较多,第一次使用时,myeclipse中一直无法进行代码提示:通过大量的网上搜索,原因如下:log4j.xml中使用log4j的DTD验证其格式的有效性"<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">",而系统或项目中找不到log4j.dtdlog4j.dtd解压log4j包就可以得到,因此出现以上警告。所以就要将log4j.dtd文件导入myeclipse的运行中,步骤如下:

 

 

这是网上其它解决的方法:http://hi.baidu.com/hankers/item/0ff8c20b43fc703bf3eafc85

 

 


0 0
原创粉丝点击