zoukankan      html  css  js  c++  java
  • Log4j学习(使用流程,Log4j.properties配置文件,配置到多个不同目标)

    参考网址:

    http://blog.csdn.net/drift_away/article/details/7403658

    http://blog.csdn.net/lxzo123/article/details/6331783

    http://baike.baidu.com/view/25347.htm?fr=aladdin

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等目标,而且所有的这些实现都可以通过更改配置文件来实现,实际应用非常便利。最近因为工作需要,对这个类库做了比较详细的学习,整理资料如下:

    一、Log4j的使用。

    1)、下载需要下载其官方(http://logging.apache.org/log4j/2.x/)的jar包,引入工程

    2)、置本地的log4j.properties文件。(默认读取的是src根目录地址,如果不在根目录,则需要在使用前调用其设置即可)

    PropertyConfigurator.configure( "D:/Code/conf/log4j.properties");

    3)、在代码中获取日志,并调用其接口记录日志

    1 Logger logger  =  Logger.getLogger(TestLog4j.class );
    2 logger.debug( " debug消息 " );
    3 logger.error( " error消息 " );

    二、Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties格式的文件。下面我们介绍使用properties格式做为配置文件的方法:二、Log4j.properties配置文件介绍

    1)、Log4j.properties参数比较多,不过搞清楚其规律则会非常好用,我们首先看一个独立的日志配置项,然后逐一介绍其参数内容和可选项。

    一个简单的完整日志配置

    #配置根Logger

    log4j.rootLogger=INFO,appenderName1,appenderName2,  …

    #配置日志信息输出目的地Appender

    log4j.appender.appenderName  =  fully.qualified.name.of.appender.class

      log4j.appender.appenderName.option1  =  value1

      …

      log4j.appender.appenderName.optionN  =  valueN

    #配置日志信息的格式(布局)

    log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class

      log4j.appender.appenderName.layout.option1  =  value1

      …

      log4j.appender.appenderName.layout.optionN  =  valueN

    其中appenderName可以当作是定义了一个变量,并配置其具体参数内容。

    2)、上述文件中的参数介绍如下。

    1、 配置根Logger,其语法为: 
    log4j.rootLogger = [ level ] , appenderName, appenderName, … 
    其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 
    appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。 

    2、 配置日志信息输出目的地Appender,其语法为: 
    log4j.appender.appenderName = fully.qualified.name.of.appender.class 
    log4j.appender.appenderName.option1 = value1 
    … 
    log4j.appender.appenderName.option = valueN 
    其中,Log4j提供的appender有以下几种: 
    org.apache.log4j.ConsoleAppender(控制台), 
    org.apache.log4j.FileAppender(文件), 
    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), 
    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), 
    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) 

    org.apache.log4j.lf5.LF5Appender (应用于Log Factor 5 Appender:)

    org.apache.log4j.net.SMTPAppender(# 应用于发送日志给邮件: )

    org.apache.log4j.jdbc.JDBCAppender(# 应用于数据库:)

    ..............................................................................................................................................
    (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:指定可以产生的滚动文件的最大数。 

    3、配置日志信息的布局,其语法为: 
    log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 
    log4j.appender.appenderName.layout.option1 = value1 
    … 
    log4j.appender.appenderName.layout.option = valueN 
    其中,Log4j提供的layout有以下几种: 
    org.apache.log4j.HTMLLayout(以HTML表格形式布局), 
    org.apache.log4j.PatternLayout(可以灵活地指定布局模式), 
    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), 
    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) 

    4、输出格式设置 (类似C语言中的printf函数的打印格式)
    在配置文件中可以通过log4j.appender.A1.layout.ConversionPattern设置日志输出格式。 
    参数: 
    %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, 
    %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 
    %r: 输出自应用启动到输出该log信息耗费的毫秒数 
    %c: 输出日志信息所属的类目,通常就是所在类的全名 
    %t: 输出产生该日志事件的线程名 
    %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) 
    %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 
    %%: 输出一个”%”字符 
    %F: 输出日志消息产生时所在的文件名称 
    %L: 输出代码中的行号 
    %m: 输出代码中指定的消息,产生的日志具体信息 
    %n: 输出一个回车换行符,Windows平台为” ”,Unix平台为” ”输出日志信息换行 
    可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 
    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字符,就从左边交远销出的字符截掉。

    ****************************************************************************

    下面给出一个日志文件配置各种不同场景的完整demlog4j.rootLogger=DEBUG,CONSOLE,A1,im#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE

    log4j.addivity.org.apache=true
    
    ###################
    # Console Appender
    ###################
    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 Appender ##################### 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
    ######################## # 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 Appender #################### log4j.appender.SOCKET=org.apache.log4j.net.SocketAppende 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
    ######################## # SMTP Appender ####################### log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.Threshold=FATAL log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From=chenyl@yeqiangwei.com log4j.appender.MAIL.SMTPHost=mail.hollycrm.com log4j.appender.MAIL.Subject=Log4J Message log4j.appender.MAIL.To=chenyl@yeqiangwei.com log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n ######################## # JDBC Appender ####################### 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@yeqiangwei.com log4j.appender.im.layout=org.apache.log4j.PatternLayout log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

    三、Log4j配置不同日志文件目录(不同数据库类似)

    1、我们除了对不同级别的日志设置不同输出appender目标,在一个单个配置文件中,也可设置多个日志文件以供不同场景使用。

    假设我们需要对三个不同场景"系统","操作","远程访问"分别记录日志。那么可以使用如下配置。

    log4j.logger.log.SYSTEM_LOG=,SYSTEM_LOG
    log4j.logger.log.OPERATE=,OPERATE
    log4j.logger.log.REMOTE=,REMOTE
    
    # SYSTEM_LOG
    log4j.appender.SYSTEM_LOG=org.apache.log4j.RollingFileAppender
    log4j.appender.SYSTEM_LOG.File=E:/icloud/log/SYSTEM_LOG.log
    log4j.appender.SYSTEM_LOG.encoding=UTF-8
    log4j.appender.SYSTEM_LOG.Threshold=all
    log4j.appender.SYSTEM_LOG.MaxFileSize=50MB
    log4j.appender.SYSTEM_LOG.MaxBackupIndex=10
    log4j.appender.SYSTEM_LOG.layout=org.apache.log4j.PatternLayout
    log4j.appender.SYSTEM_LOG.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss} %m  %n
    
    # REMOTE远程访问
    log4j.appender.REMOTE=org.apache.log4j.RollingFileAppender
    log4j.appender.REMOTE.File=E:/icloud/log/REMOTE.log
       ......
    
    # OPERATE 操作日志
    log4j.appender.OPERATE=org.apache.log4j.RollingFileAppender log4j.appender.OPERATE.File=E:/icloud/log/OPERATE.log ......

    在Java代码中,可以通过传入对应参数来获得制定的日志类。 

    Logger system_log = log.getLogger("log.SYSTEM_LOG");
    Logger operate = log.getLogger("log.OPERATE");
    Logger remote = log.getLogger("log.REMOTE");

    其中,传入的字符串参数即为log4j.logger.log.SYSTEM_LOG定义中的红色部分 

    如果是不同包结构,也可以使用上述方式,不同的是字符串替换成包路径。下面定义中,com.supermap.action和com.supermap.view分别代表不同的包。

    log4j.logger.com.supermap.action=INOF,AppenderName1

    log4j.logger.com.supermap.view=INOF,AppenderName2

    获取Log可以通过直接传入包名的方式

    Logger log = log.getLogger("com.supermap.action");

    也可以通过对应包下的class,并且会通过包结构层级往上传递。下面两者返回统一的日志记录目标相同。

    Logger log = log.getLogger(com.supermap.action.DrawAction.class);

    Logger log = log.getLogger(com.supermap.action.util.DrawActionTool.class);

     

    2、我们也可以通过编写代码动态配置的方式来修改LogProperties中的信息。

    InputStream in = this.getClass().getClassLoader()
          .getResourceAsStream("com/supermap/tools/locationnormalise/log/log4j.properties");
     
    Properties p = new Properties();
    try {
       p.load(in);
       //默认日志路径
       p.setProperty("log4j.appender.SYSTEM_LOG.File", filePath+"/SYSTEM_LOG.log");
       p.setProperty("log4j.appender.OPERATE.File", filePath+"/OPERATE.log");
       p.setProperty("log4j.appender.REMOTE.File", filePath+"/REMOTE.log");
       PropertyConfigurator.configure(p);
    } catch (IOException e) {
       e.printStackTrace();
    }

    3、最后,log4j.Properties中支持对环境变量的引用,可以通过更改环境变量来设置不同的日志记录目标

           Log4j.appender.logfile.File=${WORKDIR}/logs/app.log

    其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR”的值代替。这样,我们就可以在log4j加载配置文件之前,先用System.setProperty设置好根路径。

  • 相关阅读:
    HDU 2544 最短路
    HDU 3367 Pseudoforest
    USACO 2001 OPEN
    HDU 3371 Connect the Cities
    HDU 1301 Jungle Roads
    HDU 1879 继续畅通工程
    HDU 1233 还是畅通工程
    HDU 1162 Eddy's picture
    HDU 5745 La Vie en rose
    HDU 5744 Keep On Movin
  • 原文地址:https://www.cnblogs.com/xignzou/p/4080285.html
Copyright © 2011-2022 走看看