log4j用法和配置学习笔记

log4j的主要功能是提供日志输出,当然也提供控制台输出,使用此组件则可以很好地代替开发时需要使用System.out来打印输出的功能,从而避免在生产环境中控制台输出不必要的消息。
log4j下载地址: http://logging.apache.org/log4j/1.2/download.html
如果你需要查看API,地址是: http://logging.apache.org/log4j/1.2/apidocs/index.html

测试代码:
public class TestLog4J {
 private static Logger logger = Logger.getLogger(TestLog4J.class);

 public static void main(String[] args) {
  //默认配置,将日志信息输出到控制台,不需要配置log4j.properties文件
//	 BasicConfigurator.configure();
  //使用log4j.properties进行配置
  //项目相对路径需要把package都写进来才行
  PropertyConfigurator.configure("src/rich/util/config/log4j.properties");
 
  logger.error("This is a error message");
  logger.warn("This is a warning message");
  logger.info("This is a info message");
  logger.debug("This is a debug message");
 }
}

配置文件log4j.properties
#根Logger,配置优先级和输出源名字,这里定义为appender1
log4j.rootLogger=debug,appender1
#输出到控制台ConsoleAppender
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#输出样式为TTCLayout,包含日志产生的时间、线程、类别等等信息
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout

运行结果:


Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

简而言之,在编写log4j.properties文件时需要指定:
1.根目录
2.输出地(控制台,文件等)
3.输出样式

Log4j的基本语法:
1)配置根目录Logger,其语法为:
log4j.rootLogger=[Level], appdenderNameA, appenderNameB, ...
其中Level是日志记录的有先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL和你自己的级别,Log4j只建议四个级别,分别是ERROR、WARN、INFO、DEBUG,优先级依次降低。优先级用于输出的日志记录的开关,例如定义了INFO级别,那么低级别DEBUG的日志记录就不会输出(在代码中调用了Logger.debug方法的输出信息)。 appdenderNameA定义了输出源的名字,由用户自定义,可定义多个输出源。

例子:
log4j.rootLogger=debug,appender1 
将Logger的优先级定义为debug,输出源名字为appender1

2)定义输出源的输出目的地Appender,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class,其中,Log4j提供的appender有:
    ①org.apache.log4j.ConsoleAppender(控制台)
    ②org.apache.log4j.FileAppender(文件)
    ③org.apache.log4j.DailyRollingFileAppender(以日期为界限的日志文件,如名字,一般一天一个)
    ④org.apache.log4j.RollingFileAppender(以文件大小为界限,达到指定大小就自动重新生成另一个日志文件)
    ⑤org.apache.log4j.WriterAppender(将日志变成流格式发送到指定的地方)

  • ConsoleAppender选项 
            Threshold=WARN:指定日志消息的输出最低层次。
            ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
            Target=System.err:默认情况下是:System.out,指定输出控制台
  • FileAppender 选项 
            Threshold=WARN:指定日志消息的输出最低层次。
            ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
            File=mylog.txt:指定消息输出到mylog.txt文件。
            Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
  • 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: 每分钟
  • 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:指定可以产生的滚动文件的最大数。

例子:
ConsoleAppender
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
上面定义的输出源appender1的输出目的地为控制台ConsoleAppender

FileAppender
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=log.txt
多定义了一个File属性

DailyRollingFileAppender 
log4j.appender.appender1=org.apache.log4j.DailyRollingFileAppender  
log4j.appender.appender1.file=log.txt
log4j.appender.appender1.DatePattern='.'yyyy-MM-dd  
定义每天输出一个log

RollingFileAppender
log4j.appender.appender1=org.apache.log4j.RollingFileAppender  
log4j.appender.appender1.File=logs.txt  
log4j.appender.appender1.MaxFileSize=100KB  
log4j.appender.appender1.MaxBackupIndex=10 
定义了当大小超过100KB的时候生成新日志文件,最大不超过10个

3)定义输出样式(布局)Layout,其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class,其中Log4j提供的Layout有:
    ①org.apache.log4j.HTMLLayout(以hmtl表单格式)
    ②org.apache.log4j.TTCCLayout(线程,时间,类别等信息)
    ③org.apache.log4j.SimpleLayout(日志信息级别和信息本身的字符串)
    ④org.apache.log4j.PatternLayout(灵活的字符串格式,默认只输出信息字符串)
例子
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
上面定义的输出员appender1的输出样式为线程名字,信息级别和信息内容组成。

Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息, 打印参数如下:
        %m 输出代码中指定的消息 
   %p 输出优先级,即 DEBUG , INFO , WARN , ERROR , FATAL
   %r 输出自应用启动到输出该 log 信息耗费的毫秒数 
   %c 输出所属的类目,通常就是所在类的全名 
   %t 输出产生该日志事件的线程名 
   %n 输出一个回车换行符, Windows 平台为 “rn” , Unix 平台为 “n”
   %d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在其后指定格式,比如: %d{yyy MMM dd HH:mm:ss,SSS} ,输出类似: 2002 年 10 月 18 日 22 : 10 : 28 , 921
   %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例: Testlog4.main(TestLog4.java:10)

例子:

log4j.appender.appender1.layout.ConversionPattern = %-4r [%t] %-5p %c - %m%n
结果:


格式字母前带数字是当内容不够时进行左对齐或者右对齐,正数为左对齐,负数为右对齐。还有限制字数如 %c{10}等功能,若有特殊需求,可以参考以下内容: http://blog.csdn.net/guoquanyou/article/details/5689652

最后提供一个数据库格式的日志文件例子:
log4j.rootLogger=DEBUG,appender1
log4j.appender.appender1=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.appender1.BufferSize=1 
log4j.appender.appender1.URL=jdbc:mysql://localhost:3306/test 
log4j.appender.appender1.driver=com.mysql.jdbc.Driver 
log4j.appender.appender1.user=root 
log4j.appender.appender1.password= 
log4j.appender.appender1.sql=INSERT INTO LOG4J_INFO(LOG_TIME, THREAD, LOG_LEVEL, CLASS, MESSAGE) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m') 
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout 
log4j.appender.appender1.layout.ConversionPattern=%5p | %c{1}-%M [%d{yyyy-MM-dd HH:mm:ss}] - %m%n 


(下一部分是进行在Servlet和Spring当中配置log4j日志信息)

参考资料:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值