Log4j配置和读取

  1. log4j 配置文件

    log4j.rootLogger = INFO, stdout, D
    
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Threshold = DEBUG
    log4j.appender.stdout.Target   = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss} %-5p [%F:%L] : %m%n
    
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.D.File = E:/logs/timer.log
    log4j.appender.R.DatePattern = '.'yyyy-MM-dd 
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = INFO 
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} %-5p [%F:%L] : %m%n

    Java日志组件:log4j使用详解 log4j.rootLogger=日志级别,appender1, appender2, ….

    • 日志级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF,不区分大小写
    • 注意,需在控制台输入,只需将其中一个appender定义为stdout即可
    • 注意,rootLogger默认是对整个工程生效
    • 注意,如果只想对某些包操作,那么:log4j.logger.com.hutu=info, stdout,表示该日志对package com.hutu生效
    • 如果要对某个Logger进行特殊输出,只需要在配置一下该Logger,覆盖父亲的配置即可。覆盖时,可以配置级别,输出地,也可两者都配置

            类别category配置

        Logger还有个类别(Category)的概念,通过设置类别来设置该类别下所有的Logger:

        catergory类似于Java中的Package,效果跟Logger的名字等价

      #配置rootLogger为ERROR级别,输出地位A1
      log4j.rootLogger= ERROR, A1
      
      #作用于类别com.log4j.test下所有的Logger, 输出则继承rootLogger配置
      log4j.category.com.log4j.test=DEBUG
      
      # 配置Appender A1,输出到控制台,使用正则表达式布局
      log4j.appender.A1=org.apache.log4j.ConsoleAppender
      log4j.appender.A1.layout=org.apache.log4j.PatternLayout
      #定义输出格式
      log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

    Java日志组件:log4j使用详解 log4j.appender.appender1=org.apache.log4j.日志输出到哪儿

    • ConsoleAppender(控制台)
    • FileAppender(文件)
    • DailyRollingFileAppender(每天产生一个日志文件)
    • RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
    • WriteAppender(将日志信息以流格式发送到任意指定的地方)
    • JDBCAppender(将日志信息保存到数据库中)

    Java日志组件:log4j使用详解 log4j.appender.appender1.File=文件目录及文件

    如  ${user.home}/logs/... 路径名可以是绝对路径,相对路径一般对于web应用使用还可以。而对于java客户端程序,一般是通过书写绝对路径,绝对路径一定要存在(文件可以动态产生,目录不可以)。当然也可以通过java代码进行此项配置文件的改写实现相对路径。

    Java日志组件:log4j使用详解 log4j.appender.appender1.MaxFileSize=最大文件大小

    Java日志组件:log4j使用详解 log4j.appender.appender1.MaxBackupIndex=备份文件个数

    • 其中,appender1是在第一行定义过的;
    • 文件目录及文件,例如,/home/admin/logs/hutudan.log
    • 最大文件大小,例如,100KB
    • 备份文件个数,例如,1

    Java日志组件:log4j使用详解 log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式

    • 例如,'.'yyyy-MM-dd 

    Java日志组件:log4j使用详解 log4j.appender.appender1.layout=org.apache.log4j.日志布局格式

    • HTMLLayout(以HTML表格形式布局)
    • SimpleLayout(包含日志信息的级别和信息字符串)
    • TTCCLayout(包含日志产生的时间,执行绪,类别等信息)
    • PatternLayout(可以灵活的指定布局格式,常用)

    • #如果使用pattern布局就要指定的打印,通常指把电脑或其他电子设备中的文字或图片等可见数据,通过打印机等输出在纸张等记录物上。 更多..打印 信息的具体格式ConversionPattern,打印参数如下:
      #  %m 输出代码中指定的消息
      #  %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
      #  %r 输出自应用启动到输出该log信息耗费的毫秒数 
      #  %c 输出所属的类目,通常就是所在类的全名 
      #  %t 输出产生该日志事件的线程名 
      #  %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” 
      #  %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 
      #  %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

  2. log4j文件读取顺序
实验中我发现又有一个项目的 log4j.properties配置文件没有生效,感觉原因是其他jar包里含有该配置文件。因此查阅相关资料发现确实如此。
log4j优先加载在classpath下的log4j.defaultInitOverride。如果没有default init override的话,就去加载用户自定义的配置类名称。(可以看出log4j支持log4j.defaultInitOverride 和log4j.configuration 和log4j.configuratorClass 系统属性配置)如果还是无法加载的话,就优先加载.xml的配置文件,最后才会去加载.properties文件。  如果在项目里由于引用maven依赖关系含有log4配置的jar包的时候,因为classpath下有.xml文件,便不会去加载本工程下的.properties文件。
也就是说log4j配置文件不是采用覆盖机制,一旦一个配置文件被读取了,就不再读取其他相关的配置文件。解决方法可以是在java代码里写入:
<span style="white-space:pre">	</span>LogManager.resetConfiguration();
    	PropertyConfigurator.configure("src/resource/log4j.properties");
或者采用在本工程下写入一个 .xml文件。log4j优先加载本工程中的配置文件,其次加载jar 包中的配置文件,最后加载系统类路径的配置文件。并且前者如果加载成功,后面的加载便不进行了。
实验中分java web应用和简单的java客户端应用。前者如果打包正确一般不会出现问题,出现问题了也可以采用init 初始是一个servert来配置。后者建议采取第一种方法。对于打包jar建议不要把log4j配置存进去,这样也方便以后的更改。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值