log4j日志基本配置
- 在项目的classpath下或者resource包下(maven项目)新建一个log4j.properties文件,初始项目配置如下参数就够了
-
通过根日志记录器指定日志级别及输出源
日志输出的优先级: debug < info < warn < error < fatal
定义根日志记录器的日志级别(info)及输出源的别名(console,myFile)
该定义让日志在控制台和文件输出,并且只输出info级别以上的日志
log4j.rootLogger=info,console,myFile#######配置输出源console的具体实现为控制台输出#######
#定义输出源别名console(即根日志记录器定义的输出源)
#的实现类是ConsoleAppender(控制台输出源)log4j.appender.console=org.apache.log4j.ConsoleAppender
#指定日志输出格式的格式转换器为PatternLayout实现类
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#定义日志输出的具体格式
log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n
#######配置输出源myFile的具体实现为文件输出#######
#定义输出源别名myFile(即根日志记录器定义的输出源)
#的实现类是RollingFileAppender(文件输出源)log4j.appender.myFile=org.apache.log4j.RollingFileAppender
#定义日志文件的存储路径
log4j.appender.myFile.File=src/log/logProperties/log4j.log
#定义日志文件的大小
log4j.appender.myFile.MaxFileSize=1024kb
#定义日志文件最多生成几个(从0开始算1个,即此处最多3个文件)
#超过该大小则会覆盖前面生成的文件
log4j.appender.myFile.MaxBackupIndex=2
#指定日志输出格式的格式转换器为PatternLayout实现类
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout
#定义日志输出的具体格式
log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n
#######输出格式解释#######
#%d: 日志打印的时间点,默认格式为ISO8601,也可以另外指定格式,
#定义如下: %d{yyy年MM月dd日 HH时mm分ss秒SSS},则会输出:
#2018年01月06日 14时47分45秒590
#%p: 输出日志级别,即DEBUG,INFO,WARN,ERROR,FATAL
#%-5p:表示字符小于5位,则字符居左(不加“-”号则字符居右),你可以举一反三
#%c: 日志所在类的全名
#%M: 日志所在方法的名字
#%m: 日志信息
#%n: 输出一个回车换行符
#%L: 输出代码中的行号 -
debug:调试,info:信息,warn:警告,error:错误,fatal:致命错误
-
日志级别配置 日志级别配置可分为3类,一类如上配置是配置父类日志记录器的日志级别,第二类是配置子类日志记录器的日志级别,第三类是配置输出源(控制台、文件等)的日志级别。他们的日志级别解析优先级由低到高排列: 如果配置(也必须要配置)了父类日志记录器(rootLogger)的日志级别(假设是INFO级别),没有配置子类日志记录器的日志级别,也没有配置输出源的日志级别,则输出源只能输出INFO级别以上的; 如果配置(也必须要配置)了父类日志记录器(rootLogger)的日志级别(假设是INFO级别),配置了子类日志记录器的日志级别(假设是DEBUG级别),没有配置输出源的日志级别,则输出源输出DEBUG级别以上的; 如果配置(也必须要配置)了父类日志记录器(rootLogger)的日志级别(假设是INFO级别),配置了子类日志记录器的日志级别(假设是DEBUG级别),配置了输出源的日志级别(假设是INFO级别),则输出源输出INFO级别以上的; 如果配置(也必须要配置)了父类日志记录器(rootLogger)的日志级别(假设是INFO级别),没有配置子类日志记录器的日志级别,配置了输出源的日志级别(假设是DEBUG级别),则输出源输出INFO级别以上的; 因此,从上述的案例中我们可以知道日志记录器和输出源输出日志级别存在2个逻辑关系: 输出源如果没有定义日志级别,它会继承最接近它的子类日志记录器的日志级别;子类日志记录器没有定义日志级别,它会继承最接近它的父类日志记录器。 打印日志时输出源会根据自身定义的日志级别与最接近它的子类日志记录器定义的日志级别比较,如果输出源定义的级别高于子类日志记录器,则按输出源定义的日志级别输出日志,反之则按子类日志记录器的日志级别输出。 所以在项目中可以按如下配置方式配置日志级别: #控制父类日志记录器的日志级别为info,默认所有模块下只输出info级别以上的日志 log4j.rootLogger=info,console #单独控制某个模块下的日志级别为error,只有发生异常的时候才输出日志 log4j.logger.log.logProperties=error #单独控制某个类的日志级别debug,方便输出调试信息 log4j.logger.log.logProperties.LogPropertiesTest=debug ############# 日志输出到控制台 ############# #日志输出到控制台使用的api类 log4j.appender.console=org.apache.log4j.ConsoleAppender #指定当前输出源的日志级别,有了前面的配置,就不需要配置该项了 #log4j.appender.console.Threshold = info #指定日志输出的格式:灵活的格式 log4j.appender.console.layout=org.apache.log4j.PatternLayout #具体格式的内容 log4j.appender.console.layout.ConversionPattern=%d %-2p [%c.%M()] - %m%n