• 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设置好根路径。

  • 相关阅读:
    【秒懂音视频开发】03_重识音频
    【秒懂音视频开发】02_重识声音
    【秒懂音视频开发】01_移动通信技术的发展
    [mysql]错误解决之"Failed to start MySQL Server"
    Ubuntu 将Python从默认的2.7升级到3.* 版本
    宝塔面板后台设置免费SSL证书Let's Encrypt(三)
    Let's Encrypt 证书申请及配置(二)
    快速签发 Let's Encrypt 证书指南(一)
    DJANGO中多种重定向方法使用
    反解法|逆向思维
  • 原文地址:https://www.cnblogs.com/xignzou/p/4080285.html
Copyright © 2020-2023  润新知