一:测试环境与一样,这里不再重述
二:老规矩,先来个栗子,然后再聊聊感受
(1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清爽啦!这里为了简便,就是单单使用一个Java类来做实验了。
import org.apache.log4j.*;/** * Created by godtrue */public class UseLog4j { //日志记录器 private static Logger LOGGER = LogManager.getLogger(UseLog4j.class); //程序入口——主函数 public static void main(String[]args) { //读取使用Java的特性文件编写的配置文件 PropertyConfigurator.configure( "D:\\workspace_test\\hello-log4j\\log4j.properties" ); //输出日志信息,测试日志级别的作用(配置在配置文件中),仅仅输出大于等于目前有效级别的日志信息 LOGGER.debug("[1]-my level is DEBUG Godtrue 说:今天天气很好呀!"); LOGGER.info("[2]-my level is INFO"); LOGGER.warn("[3]-my level is WARN"); LOGGER.error("[4]-my level is ERROR"); }}
(2)下面的配置文件也仅是列举了几个常见的输出目的地的配置方式,如有更多需求可以参看官网文档,其中输出到控制台和达到一定的阈值自动回滚的文件的方式是最长用,要重点了解
#### 在代码中配置log4j环境的方式,我们已经见识过了,是不是感觉比较麻烦,我们试试使用配置文件的方式是否使您的应用程序更加的灵活。# Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性的文件(键=值)。# 下面我们先试试使用Java特性文件做为配置文件的方式## 以下的设置参数,前文已经讲过是怎么回事的,这里就不再重复了######## 设置根记录器的配置,其语法为:log4j.rootLogger = [ level ] , appenderName1, appenderName2, …appenderNameN# level用于设置日志记录的优先级,有系统自定义的8中类型,也可以自定义,官方建议只是用这四种 ERROR>WARN>INFO>DEBUG# appenderNameN用于设置日志的输出地,可以设置多个,可以自定义名称###log4j.rootLogger = debug,stdout,D,E,F#### 设置日志记录的输出地,其语法为:# log4j.appender.appenderName = fully.qualified.name.of.appender.class# log4j.appender.appenderName.option1 = value1# …# log4j.appender.appenderName.optionN = valueN# fully.qualified.name.of.appender.class:指日志输出目的类的全路径类名,有好许多预定义,下面介绍四个常用的# optionN/valueN :分别是指对应的输出目的地属性和设置的属性值## 如果对应的属性,仍然是对象级别的话,可以通过继续 . 的形式来设置对应的属性######## 输出信息到控制台,其可选的配置有如下几个:# 1)Threshold:设置日志信息输出的级别# 2)ImmediateFlush:设置日志信息是否被立即输出,默认为TRUE,立即输出# 3)Target:设置日志信息输出的目标流,有两种值System.out和System.err ,默认值System.out(err为红色,out为黑色)# 4)layout:设置日志信息输出的样式# 5)Encoding:设置文件的编码格式,默认和系统平台的编码格式保持一致###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.Encoding = Utf-8log4j.appender.stdout.Threshold = INFOlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n#### 输出信息到文件,其常用的可选的配置有如下几个:# 1)Threshold:设置日志信息输出的级别# 2)ImmediateFlush:设置日志信息是否被立即输出,默认为TRUE,立即输出# 3)File:设置日志信息输出全路径,比如:E://logs/FileAppender.log# 4)layout:设置日志信息输出的样式# 5)Encoding:设置文件的编码格式,默认和系统平台的编码格式保持一致# 6)Append:设置是否将日志消息追加到指定的文件中,默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容###log4j.appender.D = org.apache.log4j.FileAppenderlog4j.appender.D.File = E://logs/FileAppender.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = ERRORlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n#### 输出信息到文件,但是这个文件是可控的,可以配置多久产生一个新的日志信息文件,其常用的可选的配置有如下几个:# 1)Threshold:设置日志信息输出的级别# 2)ImmediateFlush:设置日志信息是否被立即输出,默认为TRUE,立即输出# 3)File:设置日志信息输出全路径,比如:E://logs/DailyRollingFileAppender.log# 4)layout:设置日志信息输出的样式# 5)Encoding:设置文件的编码格式,默认和系统平台的编码格式保持一致# 6)Append:设置是否将日志消息追加到指定的文件中,默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容# 7)DatePattern:设置文件回滚的时间样式# '.'yyyy-MM 每月# '.'yyyy-ww 每周# '.'yyyy-MM-dd 每天# '.'yyyy-MM-dd-a 每天两次# '.'yyyy-MM-dd-HH 每小时# '.'yyyy-MM-dd-HH-mm 每分钟###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File =E://logs/DailyRollingFileAppender.loglog4j.appender.E.Append = truelog4j.appender.E.Threshold = WARNlog4j.appender.E.DatePattern = '.'yyyy-MM-dd-HH-mmlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n#### 输出信息到文件,但是这个文件是可控的,当文件的大小达到某个阈值的时候,日志文件会自动回滚,其常用的可选的配置有如下几个:# 1)Threshold:设置日志信息输出的级别# 2)ImmediateFlush:设置日志信息是否被立即输出,默认为TRUE,立即输出# 3)File:设置日志信息输出全路径,比如:E://logs/RollingFileAppender.log# 4)layout:设置日志信息输出的样式# 5)Encoding:设置文件的编码格式,默认和系统平台的编码格式保持一致# 6)Append:设置是否将日志消息追加到指定的文件中,默认值true,将消息追加到指定文件中,false指将消息覆盖指定的文件内容# 7)MaxFileSize:设置当文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB# 8)MaxBackupIndex:设置保存备份回滚日志的最大个数###log4j.appender.F = org.apache.log4j.RollingFileAppenderlog4j.appender.F.File =E://logs/RollingFileAppender.loglog4j.appender.F.Append = truelog4j.appender.F.Threshold = INFOlog4j.appender.F.MaxFileSize = 1log4j.appender.F.MaxBackupIndex = 5log4j.appender.F.layout = org.apache.log4j.PatternLayoutlog4j.appender.F.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n
三:感受
1)使用配置文件来控制日志的输出,相当的灵活方便,对于业务程序本身的耦合性也变得最低了,这也是在实际的工作中常常使用的一种方式
2)我这里为了方便演示和研究配置文件怎么配置的,就没有加入其它框架了,也没有采用建一个JavaWeb项目通过配置文件的方式来控制了,实际工作中应该如此的
3)这里的关注点是配置文件怎么配置,我在注释中做了足够多的说明,如果看过前面的博文,对于这些东西相对一定很容易理解,毕竟日志框架就是干这些事情的
4)这里列举的配置方式并不完整,毕竟还有许多的日志输出目的地不在其内,不过他们是常用的
5)每一个还是要好好的试验一下,理解起来才更深刻的,否则下次项目出问题了,项目负责人让你解决,你都不知道到哪里找日志文件来分析的