前言
目前 JAVA
中使用最多的三大日志框架:
logback
:SpringBoot
中的默认框架
log4j
log4j2
打印日志也面临着消耗性能,导致高并发性能下降。
优化日志一般也是从更换性能更高的日志框架做起。(对于以前的项目来讲,可以从其他日志框架切换到 log4j2
,一般来讲,日志的性能会有一部分的提高。)
然后可以使用异步日志。关掉控制台日志输出等等。
log4j2
日志
配置 pom.xml
这里要注意, Springboot
原来会默认引入 logback
1 2 3 4 5 6 7 8 9 10 11 12
| <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency> </dependencies>
|
去掉 Springboot
原来的日志
其它地方引入的 spring-boot-starter-logging
也要去掉。
这里推荐一个 IDEA plugin
叫 Maven Helper
.
打开 pom.xml
会在左下角有一个 Dependency analyzer
页面,可以搜索目标依赖
右键点击需要操作的依赖,可以很方便的 exclude
1 2 3 4 5 6 7 8 9 10 11
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency>
|
配置 log4j2.yml
下面有简要列出了基础功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Configuration: status: INFO Properties: Property: - name: log.level.console value: info - name: log.path value: app_log - name: project.name value: boot Appenders: Console: name: CONSOLE target: SYSTEM_OUT PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" RollingFile: - name: ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/${project.name}.log filePattern: "${log.path}/$${date:yyyy-MM}/${project.name} -%d{yyyy-MM-dd}-%i.log.gz" PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" Policies: SizeBasedTriggeringPolicy: size: "64 MB" DefaultRolloverStrategy: max: 1000 Loggers: Root: level: INFO AppenderRef: - ref: CONSOLE - ref: ROLLING_FILE Logger: - name: boot additivity: true level: DEBUG AppenderRef:
|
重复打印日志的原因
简单的问题
重复打印日志
Logger
继承了 Root
,所以Root
中的 AppenderRef
配置,都会被 Logger
继承过去。
如果不想 Logger
继承了 Root
,只需要添加 additivity
属性为 false
,additivity
默认是为 true
的。
修改颜色
这里提供一个华丽胡哨的颜色,配置在 SYSTEM_OUT
中。
1
| pattern: "%clr{%d{yyyy-MM-dd HH:mm:ss,SSS}}{faint}:%clr{%-5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%-32t]}{faint} %clr{%-40.40c{1.} (%F:%L)}{cyan} %clr{:}{faint} %m%n%xwEx"
|
过滤器
1 2 3 4 5 6 7 8 9 10
| RollingFile: - name: ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/${project.name}.log thresholdFilter: level: INFO onMatch: ACCEPT onMismatch: DENY
|
是按严重(重要)程度来分的(如下6种):
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
1 2 3 4 5 6
| onMatch="ACCEPT" 表示匹配该级别及以上 onMatch="DENY" 表示不匹配该级别及以上 onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上 onMismatch="ACCEPT" 表示匹配该级别以下 onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的 onMismatch="DENY" 表示不匹配该级别以下的
|
Appender
类型
Appender |
描述 |
ConsoleAppender |
主要用于将日志打印到控制台 |
FailoverAppender |
配置多个Appender,当primary Appender挂了的时候可以切换到Standby Appender |
FileAppender |
将日志写入文件 |
JDBCAppender |
将日志写入到数据库 |
JMS Appender |
将日志写入消息broker |
HttpAppender |
将日志写入http服务端 |
KafkaAppender |
将日志写入kafka服务端 |
NoSQLAppender |
将日志写入NoSQL服务端 |
MongoDB |
将日志写入MongoDB |
RollingFileAppender |
将日志写入回滚文件 |
SocketAppender |
将日志写入socket服务器 |
本文地址: https://github.com/maxzhao-it/blog/post/26399/