让你的spring-boot应用日志随心所欲--spring boot日志深入分析
2020-12-13 02:42
标签:一个 ISE mod over led 日志 ble 决定 gre spring boot使用Commons Logging作为内部的日志系统,并且给Java Util Logging,Log4J2以及Logback都提供了默认的配置。 2.spring boot日志默认配置 我们启动一个空的spring-boot项目看一下控制台的日志 控制台的默认配置 logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} blue 1、日期和时间--精确到毫秒,并按照时间进行简单的排序,格式为: %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} 2、日志级别--ERROR,WARN,INFO,DEBUG,TRACE %clr(${LOG_LEVEL_PATTERN:-%5p}) 3、进程ID号 %clr(${PID:- }) 4、日志内容,用"---"分隔符分开 %clr(---){faint} 5、线程名字--括在方括号中 %clr([%15.15t]){faint} 6、日志的名字--通常对应的是类名 %clr(%-40.40logger{39}){cyan} 不同日志级别对应的颜色如下 3.spring boot日志配置 可以通过application.properties或者application.yml查看所有配置 每个配置后面都有说明,就不一一赘述了。 4.spring boot日志实现原理 点击配置属性,可以进入LoggingApplicationListener这个类, `/** 它实现了GenericApplicationListener接口,它默认定义了日志组DEFAULT_GROUP_LOGGERS和日志级别LOG_LEVEL_LOGGERS 你也可以自定义logging.level和logging.group,它们都是map结构。LoggingApplicationListener重写了onApplicationEvent方法,实现日志的打印 第一步:根据classloader里加载的依赖决定使用哪个日志系统? 主要实现有JavaLoggingSystem,Log4J2LoggingSystem,LogbackLoggingSystem 第二步:通过classpath,enviroment等获取参数初始化日志系统 第三步:注册springBootLoggingSystem 第四步和第五步:日志系统清洗 5.自定义配置文件 日志系统 自定义配置文件 logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy Log4j2 log4j2-spring.xml or log4j2.xml JDK (Java Util Logging) logging.properties 6.总结 spring boot日志系统封装了logback,log4j2和java log,默认情况下使用java log,一旦使用各种starts,则默认使用Log4J2,也可以通过classpath来改变,pom.xml指定 【1】https://docs.spring.io/spring-boot/docs/2.1.2.RELEASE/reference/htmlsingle/#boot-features-logging-format 【2】https://www.jb51.net/article/133795.htm 让你的spring-boot应用日志随心所欲--spring boot日志深入分析 标签:一个 ISE mod over led 日志 ble 决定 gre 原文地址:https://blog.51cto.com/davidwang456/2410579
如果使用了spring boot的Starters,那么默认会使用Logback用于记录日志。
其中%clr为配置不同的颜色输出,支持的颜色有以下几种:
cyan
faint
green
magenta
red
yellow
输出顺序分析:
注意:Logback没有FATAL级别(映射到ERROR)
*/`private static final Map
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ApplicationStartingEvent) {
onApplicationStartingEvent((ApplicationStartingEvent) event); //1
}
else if (event instanceof ApplicationEnvironmentPreparedEvent) {
onApplicationEnvironmentPreparedEvent(
(ApplicationEnvironmentPreparedEvent) event); //2
}
else if (event instanceof ApplicationPreparedEvent) {
onApplicationPreparedEvent((ApplicationPreparedEvent) event); //3
}
else if (event instanceof ContextClosedEvent && ((ContextClosedEvent) event)
.getApplicationContext().getParent() == null) {
onContextClosedEvent(); //4
}
else if (event instanceof ApplicationFailedEvent) {
onApplicationFailedEvent(); //5
}
}
private void onApplicationStartingEvent(ApplicationStartingEvent event) {
this.loggingSystem = LoggingSystem
.get(event.getSpringApplication().getClassLoader());
this.loggingSystem.beforeInitialize();
}
/**
* Initialize the logging system according to preferences expressed through the
* {@link Environment} and the classpath.
* @param environment the environment
* @param classLoader the classloader
*/
protected void initialize(ConfigurableEnvironment environment,
ClassLoader classLoader) {
new LoggingSystemProperties(environment).apply();
LogFile logFile = LogFile.get(environment);
if (logFile != null) {
logFile.applyToSystemProperties();
}
initializeEarlyLoggingLevel(environment);
initializeSystem(environment, this.loggingSystem, logFile);
initializeFinalLoggingLevels(environment, this.loggingSystem);
registerShutdownHookIfNecessary(environment, this.loggingSystem);
}
private void onApplicationPreparedEvent(ApplicationPreparedEvent event) {
ConfigurableListableBeanFactory beanFactory = event.getApplicationContext()
.getBeanFactory();
if (!beanFactory.containsBean(LOGGING_SYSTEM_BEAN_NAME)) {
beanFactory.registerSingleton(LOGGING_SYSTEM_BEAN_NAME, this.loggingSystem);
}
}
private void onContextClosedEvent() {
if (this.loggingSystem != null) {
this.loggingSystem.cleanUp();
}
}
private void onApplicationFailedEvent() {
if (this.loggingSystem != null) {
this.loggingSystem.cleanUp();
}
}
Logback参考资料
文章标题:让你的spring-boot应用日志随心所欲--spring boot日志深入分析
文章链接:http://soscw.com/essay/26126.html