您的位置:首页 > 编程语言 > Java开发

log4j用法和配置学习笔记

2014-11-24 20:03 435 查看
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日志信息)

参考资料:
http://www.cnblogs.com/simle/archive/2011/09/29/2195341.html
http://blog.csdn.net/anlina_1984/article/details/5313023
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 日志记录 log4j