Logback
Logback
1、官方文档
https://logback.qos.ch/manual/index.html
2、下载地址
https://logback.qos.ch/download.html
3、快速使用
这里主要是 logback + SLF4j 配合使用。
- pom引入jar包
org.slf4j
slf4j-api
1.7.31
ch.qos.logback
logback-core
1.2.3
ch.qos.logback
logback-classic
1.2.3
compile
- src/main/resource 创建 logback.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
logback
INFO
${CONSOLE_LOG_PATTERN}
UTF-8
- Java 代码
package com.black.nginx.app;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NginxApp {
private static Logger logger = LoggerFactory.getLogger(NginxApp.class);
public static void main(String[] args) {
logger.info("app start ...");
logger.info("app shutdown .");
}
}
- 效果
2021-07-13 23:19:41.591 INFO --- [ main] com.black.nginx.app.NginxApp : app start ...
2021-07-13 23:19:41.596 INFO --- [ main] com.black.nginx.app.NginxApp : app shutdown .
4、logback.xml拷贝就用
- console 打印
<?xml version="1.0" encoding="UTF-8"?>
logback
${CONSOLE_LOG_PATTERN}
UTF-8
打印结果:
2021-07-14 23:00:38.497 [INFO ] [main ] com.black.nginx.app.NginxApp.main[line:11]: app start ...
2021-07-14 23:00:38.497 [INFO ] [main ] com.black.nginx.app.NginxApp.main[line:14]: app shutdown .
- 日志文件
1、固定文件
<?xml version="1.0" encoding="UTF-8"?>
${file_name_date}/log-info-${file_name_date}.log
${CONSOLE_LOG_PATTERN}
UTF-8
2、基于时间分隔文件
<?xml version="1.0" encoding="UTF-8"?>
true
logFile.%d{yyyy-MM-dd}.log
30
3GB
3、基于时间和大小分隔文件
<?xml version="1.0" encoding="UTF-8"?>
true
logFile.%d{yyyy-MM-dd}.%i.log
100MB
30
20GB
4、基于固定大小
<?xml version="1.0" encoding="UTF-8"?>
log-info.log
log-info.%i.log.zip
1
3
5MB
${CONSOLE_LOG_PATTERN}
5、logback.xml Appender 详解
- ConsoleAppender
%-4relative [%thread] %-5level %logger{35} - %msg %n
- FileAppender
log-${bySecond}.txt
%logger{35} - %msg%n
- RollingFileAppender
logFile.log
logFile.%d{yyyy-MM-dd}.log
30
3GB
%-4relative [%thread] %-5level %logger{35} - %msg%n
true
logFile.%d{yyyy-MM-dd}.log
30
3GB
%-4relative [%thread] %-5level %logger{35} - %msg%n
mylog.txt
mylog-%d{yyyy-MM-dd}.%i.txt
100MB
60
20GB
%msg%n
test.log
tests.%i.log.zip
1
3
5MB
%-4relative [%thread] %-5level %logger{35} - %msg%n
test.log
test.%i.log.zip
1
3
5MB
%-4relative [%thread] %-5level %logger{35} - %msg%n
fileNamePattern 与 Rollover关系:
fileNamePattern | Rollover schedule |
---|---|
/wombat/foo.%d | 每天 |
/wombat/%d{yyyy/MM}/foo.txt | Rollover 每月开始 |
/wombat/foo.%d{yyyy-ww}.log | Rollover 每周第一天 |
/wombat/foo%d{yyyy-MM-dd_HH}.log | Rollover 每小时滚动 |
/wombat/foo%d{yyyy-MM-dd_HH-mm}.log | Rollover 每分钟滚动 |
/wombat/foo%d{yyyy-MM-dd_HH-mm, UTC}.log | Rollover 每分钟滚动 |
/foo/%d{yyyy-MM,aux}/%d.log | Rollover daily. Archives located under a folder containing year and month. |
Rollover 就是 maxHistory 属性的单位。
6、logback.xml PatternLayout 详解
抄自https://logback.qos.ch/manual/layouts.html
我对 logback.xml 中 pattern 里的 %d %c 什么的搞不明白什么含义,下面就介绍一下,pattern 中使用到的Conversion Word的含义:
- %c{length}
或 %lo{length} %logger{length}
Conversion | Logger name | Result |
---|---|---|
%logger | mainPackage.sub.sample.Bar | mainPackage.sub.sample.Bar |
%logger{0} | mainPackage.sub.sample.Bar | Bar |
%logger{5} | mainPackage.sub.sample.Bar | m.s.s.Bar |
%logger{10} | mainPackage.sub.sample.Bar | m.s.s.Bar |
%logger{15} | mainPackage.sub.sample.Bar | m.s.sample.Bar |
%logger{16} | mainPackage.sub.sample.Bar | m.sub.sample.Bar |
%logger{26} | mainPackage.sub.sample.Bar | mainPackage.sub.sample.Bar |
- %C{length}
或 %class{length}
打印类名
- %cn
或 contextName
- %d{pattern}
或 %date{pattern} %d{pattern, timezone}
%date{pattern, timezone}
打印日期
Conversion Pattern | Result |
---|---|
%d | 2006-10-20 14:06:49,812 |
%date | 2006-10-20 14:06:49,812 |
%date{ISO8601} | 2006-10-20 14:06:49,812 |
%date{HH:mm:ss.SSS} | 14:06:49.812 |
%date{dd MMM yyyy;HH:mm:ss.SSS} | 20 oct. 2006;14:06:49.812 |
- %F / %file
java 源文件的名字
-
%M / %method
打印日志所在方法名 -
%L / %line
logger.info等代码所在文件的行数 -
%m / %msg / %message
打印 用户日志信息,即 logger.info()的参数 -
%n
换行 -
%p / %le / %level
日志事件等级 INFO ,DEBUG等 -
%r / %relative
应用启动执行,一直到打印日志,执行的毫秒数 -
%t / %thread
线程名 -
%ex{depth}
exception{depth}
throwable{depth}
打印异常信息控制
格式 | 结果 |
---|---|
%ex | mainPackage.foo.bar.TestException: Houston we have a problem at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22) at mainPackage.foo.bar.TestThrower.readyToLaunch(TestThrower.java:17) at mainPackage.ExceptionLauncher.main(ExceptionLauncher.java:38) |
%ex{short} | mainPackage.foo.bar.TestException: Houston we have a problem at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22) |
%ex{full} | mainPackage.foo.bar.TestException: Houston we have a problem at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22) at mainPackage.foo.bar.TestThrower.readyToLaunch(TestThrower.java:17) at mainPackage.ExceptionLauncher.main(ExceptionLauncher.java:38) |
%ex{2} | mainPackage.foo.bar.TestException: Houston we have a problem at mainPackage.foo.bar.TestThrower.fire(TestThrower.java:22) at mainPackage.foo.bar.TestThrower.readyToLaunch(TestThrower.java:17) |
-
%property{key}
打印Properties文件中的key 对应的 value -
%caller{depth}
打印方法调用层级信息
7、logback.xml Format modifiers 详解
Format modifier | 左对齐 | 最小宽度 | 最大宽度 | 评论 |
---|---|---|---|---|
%20logger | 否 | 20 | 无 | 如果小于20字符则默认右对齐 |
%-20logger | 是 | 20 | 无 | 如果小于20字符则左对齐 |
%.10logger | NA | 无 | 30 | 超出30字符则删除 com.black.nginx.app.NginxApp 会打印出:p.NginxApp |
%20.30logger | 否 | 20 | 30 | 如果超过30个字符,则将从末尾开始截取30个字符打印 |
%-20.30logger | 是 | 20 | 30 | 如果超过30个字符,则将从开头开始截取30个字符打印 |
%.-30logger | NA | 无 | 30 | 如果超过30个字符,则将从开头开始截取30个字符打印 |