zoukankan      html  css  js  c++  java
  • log4j配置文件详解及手动加载的方式

    参考博客: https://www.xuebuyuan.com/3243567.html

    一、配置文件说明:
    1、log4j.rootLogger=INFO, stdout, R
       将等级为INFO的日志信息使用stdout和R进行输出,这里可以自己命名;
        等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,OFF是关闭,不输出任何信息,其他级别按这个顺序依次降低,如果指定一个级别,如INFO,则比该级别高的信息都会输出,此时会输出FATAL、ERROR、WARN、INFO级别的信息。

    2、log4j.appender.stdout=org.apache.log4j.ConsoleAppender
       log4j.appender.stdout.option1=value1
       定义stdout的输出端类型,以及属性选项配置,可以有下面几种类型:
       org.apache.log4j.ConsoleAppender(输出在控制台)
       org.apache.log4j.FileAppender(输出到文件)   
       org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)   
       org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件  
       org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

       输出端共同选项:
       Threshold=WARN:指定日志消息的输出最低层次。
       ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

       ConsoleAppender选项:
       Target=System.err:默认情况下是:System.out,指定输出控制台
       文件输出端共同选项:
       File=mylog.txt:指定消息输出到mylog.txt文件。
       Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
       DailyRollingFileAppender 选项:
       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: 每分钟

       RollingFileAppender 选项:
       MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
       MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

    3、log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
       定义stdout的输出端的layout是类型,可以有下面几种类型:
       org.apache.log4j.HTMLLayout(以HTML表格形式布局),
     org.apache.log4j.PatternLayout(可以灵活地指定布局模式),   
       org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),   
       org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

    4、log4j.appender.stdout.layout.ConversionPattern= [APPName] %p [%t] %C.%M(%L) | %m%n
       如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,具体参数:
       %m 输出代码中指定的消息
     %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
     %r 输出自应用启动到输出该log信息耗费的毫秒数
     %c 输出所属的类目,通常就是所在类的全名
     %t 输出产生该日志事件的线程名
     %n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”
     %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921   %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
       %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
       %%: 输出一个”%”字符
       %F: 输出日志消息产生时所在的文件名称
       %M: 输出执行方法
       %L: 输出代码中的行号
       可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
       1) c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
       2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,”-”号指定左对齐。
       3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
       4) .30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。
       [APPName]是log信息的开头,可以为任意字符,一般为项目简称。

    5、log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

    6、log4j.appender.R.File=D:\logs\APPName.log
       定义R的输出端的文件名D:\logs\APPName.log,该名称可以自行修改。

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

    8、log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

    9、log4j.logger.com.johnny=DEBUG

       自定义各个包中日志级别,指定com.johnny包下的所有类的等级为DEBUG。

    二、加载自己的配置文件
      log4j默认加载类路径下的log4j.properties文件,如果自定义其他名称的properties文件的时候,就需要使用DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加载.xml文件
           //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件来加载配置文件,

    这里要注意一下配置文件的路径:
    针对java项目:
       1、绝对路径 --  F:\test\log4j.properties;
       这个就不用多说了,如果不是web项目的话,写绝对路径那就是硬盘上的全路径了
       2、相对路径 --  src/youFileName.properties
       log4j默认的当前路径工程下面,即跟src同级目录,了解这点相信相对路径大家都手到擒来了,或者类加载器获得路径也可以;

    针对web项目:
        getRealPath获得路径加上文件名

    三 :动态的改变记录级别和策略及在web中的加载,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下。
    1 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。
    2. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。

    首先我们在web.xml中需要设定一下

    <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> 

    其中第二部分就是能够动态修改log4j.properties的关键,容器会每60秒扫描log4j的配置文件 。对 于log4j的配置文件如何写,这就不多说了,大家可以去google,有一点就是我们如果用RollingFileAppender或者 FileAppender时,可以通过${webapp.root}来定位到服务器的发布的该项目下,这是spring把web目录的路径压入到了 webapp.root的系统变量。然后,在log4j.properties 里就可以这样定义logfile位置

  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/xumBlog/p/12536534.html
Copyright © 2011-2022 走看看