Log4j新手快速入门教程
简介
Log4J 是Apache的一个开源项目(官网 http://jakarta.apache.org/log4j),通过在项目中使用Log4J,我们可以控制日志信息输出到控制台、文件、GUI组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。
组成
Log4J主要由 Loggers(日志记录器)、Appenders(输出端)和Layout(日志格式化器)组成。其中Loggers控制日志的输出级别与日志是否输出;Appenders指定日志的输出方式(输出到控制台、文件等);Layout控制日志信息的输出格式。
日志级别
Log4J在org.apache.log4j.Level类中定义了OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL七种日志级别:
- OFF 最高日志级别,关闭左右日志
- FATAL 将会导致应用程序退出的错误
- ERROR 发生错误事件,但仍不影响系统的继续运行
- WARN 警告,即潜在的错误情形
- INFO 一般和在粗粒度级别上,强调应用程序的运行全程
- DEBUG 一般用于细粒度级别上,对调试应用程序非常有帮助
- ALL 最低等级,打开所有日志记录
注:一般只使用4个级别,优先级从高到低为ERROR>WARN>INFO>DEBUG
Appender(输出端)
Appender用来指定日志输出到哪个地方,可以同时指定日志的输出目的地。Log4j常用的输出目的地有以下几种:
Layout(日志格式化器)
快速入门
首先在maven中引入log4j的依赖:
log4j log4j 1.2.17
创建Log4jTest类,测试Log4j的使用:
publicclassLog4JTest{ publicstaticvoidmain(String[]args){ //获取Logger对象的实例 Loggerlogger=Logger.getLogger(Log4JTest.class); //使用默认的配置信息,不需要写log4j.properties BasicConfigurator.configure(); //设置日志输出级别为WARN,这将覆盖配置文件中设置的级别,只有日志级别高于WARN的日志才输出 logger.setLevel(Level.WARN); logger.debug("这是debug"); logger.info("这是info"); logger.warn("这是warn"); logger.error("这是error"); logger.fatal("这是fatal"); } }
这里首先通过Logger.getLogger(Log4Test.class)创建Logger实例,然后调用BasicConfigurator.configure()方法指定该Logger使用默认的配置信息,接着调用looger.setLevel(Level.WARN)设置Logger的日志输出级别为WARN。运行main函数,控制台将会输出warn以上的错误信息。控制台输出如下:
0[main]WARNcom.huang.log4j.Log4JTest-这是warn
0[main]WARNcom.huang.log4j.Log4JTest-这是error
0[main]WARNcom.huang.log4j.Log4JTest-这是fatal
注:如果没有调用BasicConfigurator.configure()方法,则运行main函数的时候则会报错,因为Log4j框架在运行的时候会加载项目路径下的log4j.properties配置文件(关于配置文件的使用,会在后面讲解)。而我们此时的项目中是没有该文件的。如果配置文件的名称不是log4j.properties,则可以通过PropertyConfigurator.configure(StringconfigFilename)指定配置文件的名称。
格式化器的使用
修改Log4JTest中的代码:
publicclassLog4JTest{ publicstaticvoidmain(String[]args){ Loggerlogger=Logger.getLogger(Log4JTest.class); BasicConfigurator.configure(); HTMLLayoutlayout=newHTMLLayout(); //SimpleLayoutlayout=newSimpleLayout(); try{ FileAppenderappender=newFileAppender(layout,"D:\\out.html",false); logger.addAppender(appender); //设置日志输出级别为info,这将覆盖配置文件中设置的级别,只有日志级别高于WARN的日志才输出 logger.setLevel(Level.WARN); logger.debug("这是debug"); logger.info("这是info"); logger.warn("这是warn"); logger.error("这是error"); logger.fatal("这是fatal"); }catch(IOExceptione){ e.printStackTrace(); } } }
首先创建一个HTML格式的格式化器(HTMLLayout),然后创建文件输出端(FileAppender)指定输出端的格式为HTML格式,这里我指定输出路径为D盘下的out.html文件。然后通过logger.addAppender(appender)将文件输出端加载到Logger中。运行main函数,在D盘下会生成一个out.html文件,打开文件,里面的信息就是代码中输出的日志信息:
#控制台输出配置 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d[%t]%-5p[%c]-%m%n #文件输出配置 log4j.appender.A=org.apache.log4j.DailyRollingFileAppender log4j.appender.A.File=D:/log.txt#指定日志的输出路径 log4j.appender.A.Append=true log4j.appender.A.Threshold=DEBUG log4j.appender.A.layout=org.apache.log4j.PatternLayout#使用自定义日志格式化器 log4j.appender.A.layout.ConversionPattern=%-d{yyyy-MM-ddHH:mm:ss}[%t:%r]-[%p]%m%n#指定日志的输出格式 log4j.appender.A.encoding=UTF-8#指定日志的文件编码 #指定日志的输出级别与输出端 log4j.rootLogger=DEBUG,Console,A
在log4j.properties配置文件中,我们定义了日志输出级别与输出端,在输出端中分别配置日志的输出格式。
log4j采用类似C语言的printf函数的打印格式格式化日志信息,具体的占位符及其含义如下:
%m 输出代码中指定的日志信息
%p 输出优先级,及DEBUG、INFO等
%n 换行符(Windows平台的换行符为"\n",Unix平台为"\n")
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出打印语句所属的类的全名
%t 输出产生该日志的线程全名
%d 输出服务器当前时间,默认格式为ISO8601,也可以在后面指定格式。如:%d{yyyy年MM月dd日HH:mm:ss}
%l 输出日志时间发生的位置,包括类名、发生的线程,以及在代码中的行数,如:Test.main(Test.java:10)
%F 输出日志消息产生时所在的文件名称
%L 输出代码中的行号
%x 输出和当前线程相关的NDC(嵌套诊断环境)
%% 输出一个"%"字符
可以在%与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式。如:
%5c 输出category名称,最小宽度是5,category<5,默认的情况下右对齐
%-5c 输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格
%.5c 输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格
%20.30c category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉
然后编写测试类Log4JTest.java:
publicclassLog4JTest{ publicstaticvoidmain(String[]args){ //获取Logger对象的实例 Loggerlogger=Logger.getLogger(Log4JTest.class); logger.debug("这是debug"); logger.info("这是info"); logger.warn("这是warn"); logger.error("这是error"); logger.fatal("这是fatal"); } }
程序运行后控制台输出文本:
2018-07-1214:36:36,114[main]WARN [com.huang.log4j.Log4JTest]-这是warn
2018-07-1214:36:36,114[main]ERROR[com.huang.log4j.Log4JTest]-这是error
2018-07-1214:36:36,114[main]FATAL[com.huang.log4j.Log4JTest]-这是fatal
并会在D盘生成一份log.txt文件。文本内容如下:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。