文章目录
1 log4j和log4j2配置详解
1.1 概念简述
1.1.1 log4j简述
Log4j
是Apache
的一个Java
的日志库,通过使用Log4j
,我们可以控制日志信息输送的目的地(控制台、文件、数据库等);我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
1.1.2 Log4j2简述
Apache Log4j 2
是对Log4j
的升级,它比其前身Log4j 1.x
提供了重大改进,并提供了Logback
中可用的许多改进,同时修复了Logback
架构中的一些问题。
现在最优秀的Java
日志框架是Log4j2
,没有之一。根据官方的测试表明,在多线程环境下,Log4j2的异步日志表现更加优秀。在异步日志中,Log4j2
使用独立的线程去执行I/O
操作,可以极大地提升应用程序的性能
1.2 pom.xml文件
首先就是必须排除springboot
里面的默认log
配置引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.9.RELEASE</version>
<!-- 排除默认日志配置 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入log4j2的jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>RELEASE</version>
</dependency>
1.3 log4j.properties的引用
application.properties
配置文件中进行如下配置
#配置日志
logging.config=classpath:log4j.properties
1.4 log4j.properties的说明
1.4.1 rootLogger属性
log4j.properties
文件说明
log4j.rootLogger = level,appenderName1,appenderName2, .....
level
是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
或者自定义的级别
level
的默认优先级:ALL < DEBUG < INFO <WARN < ERROR < FATAL < OFF
appenderName
是日志信息输出位置,可以同时指定多个输出目的地
1.4.2 输出目的地appender属性
Appender
的配置方式:
log4j.appender.appenderName = Log4j提供的appender类
log4j.appender.appenderName.属性名 = 属性值
.....
log4j.appender.appenderName.属性名 = 属性值
Log4j
提供的appender
有以下5
种,分别可以将日志信息输出到5
个不同的平台
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
1.4.2.1 ConsoleAppender
Threshold=WARN
:指定日志消息的输出最低层次。
ImmediateFlush=true
:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err
:默认情况下是:System.out,指定输出控制台
1.4.2.2 FileAppender
Threshold=WARN
:指定日志消息的输出最低层次。
ImmediateFlush=true
:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt
:指定消息输出到mylog.txt
文件。
Append=false
:默认值是true
,即将消息增加到指定文件中,false
指将消息覆盖指定的文件内容。
1.4.2.3 DailyRollingFileAppender
Threshold=WARN
:指定日志消息的输出最低层次。
ImmediateFlush=true
:默认值是true
,意谓着所有的消息都会被立即输出。
File=mylog.txt
:指定消息输出到mylog.txt
文件。
Append=false
:默认值是true
,即将消息增加到指定文件中,false
指将消息覆盖指定的文件内容。
DatePattern=”.”yyyy-ww
:每周滚动一次文件,即每周产生一个新的文件。 当然也可以指定按月、周、天、时和分
。即对应的格式如下:
- ”.”yyyy-MM: 每月
- ”.”yyyy-ww: 每周
- ”.”yyyy-MM-dd: 每天
- ”.”yyyy-MM-dd-a: 每天两次
- ”.”yyyy-MM-dd-HH: 每小时
- ”.”yyyy-MM-dd-HH-mm: 每分钟
1.4.2.4 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
:指定可以产生的滚动文件的最大数。
1.4.3 配置日志信息的格式layout
日志信息格式的配置方式:
log4j.appender.appenderName.layout = Log4j提供的layout类
log4j.appender.appenderName.layout.属性 = 值
.....
log4j.appender.appenderName.layout.属性 = 值
Log4j
提供的layout有以下几种:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
1.4.3.1 HTMLLayout
LocationInfo=true
:默认值是false,输出java文件名称和行号
Title=my app file
:默认值是 Log4J Log Messages
1.4.3.2 PatternLayout
ConversionPattern=%m%n
:指定怎样格式化指定的消息。
1.4.3.3 Layout日志格式中各类符号详细说明
Log4J
采用类似C
语言中的printf
函数的打印格式格式化日志信息,打印参数如下:
og4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
日志信息格式中几个符号所代表的含义:
-X号:
X信息输出时左对齐;%p:
输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,%d:
输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式, 比如:%d{yyy MMM dd HH:mm:ss,SSS}
,输出类似:2002年10月18日 22:10:28,921%r:
输出自应用启动到输出该log信息耗费的毫秒数%c:
输出日志信息所属的类目,通常就是所在类的全名%t:
输出产生该日志事件的线程名%l:
输出日志事件的发生位置,相当于%C.%M(%F:%L)
的组合,包括类目名、发生的线程,以及行数。 举例:Testlog4.main(TestLog4.java:10)
%x:
输出和当前线程相关联的NDC
(嵌套诊断环境),尤其用到像java servlets
这样的多客户多线程的应用中。%%:
输出一个”%”
字符%F:
输出日志消息产生时所在的文件名称%L:
输出代码中的行号%m:
输出代码中指定的消息,产生的日志具体信息%n:
输出一个回车换行符,Windows
平台为”\r\n”
,Unix
平台为”\n”
输出日志信息换行
可以在%
与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式
。如:
%20c:
指定输出category
的名称,最小的宽度是20
,如果category
的名称小于20的话,默认的情况下右对齐。%-20c:
指定输出category
的名称,最小的宽度是20,如果category的名称小于20的话,”-“
号指定左对齐。%.30c:
指定输出category
的名称,最大的宽度是30,如果category
的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。%20.30c:
如果category
的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉
1.5 log4j.properties实例
# 设置日志根
log4j.rootLogger = debug , stdout , D , E
# 此处的addivity指是否追加写入日志
log4j.addivity.org.apache=true
# 输出到控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
# 输出到日志文件
#log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.D.File = logs/log.log
#log4j.appender.D.Append = true
#log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
#log4j.appender.D.layout = org.apache.log4j.PatternLayout
#log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# 保存异常信息到单独文件
#log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.D.File = logs/error.log ## 异常日志文件名
#log4j.appender.D.Append = true
#log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
#log4j.appender.D.layout = org.apache.log4j.PatternLayout
#log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n