fix: resolve SpringBoot-LogSystem.md (#77)

This commit is contained in:
Yang Libin 2020-11-06 14:30:19 +08:00 committed by GitHub
parent d609c2daa6
commit 012bd99394
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,19 +9,19 @@
- 日志级别: `org.springframework.boot.logging.LogLevel`
```java
public enum LogLevel {
```java
public enum LogLevel {
TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
}
```
}
```
## java 日志实现
## Java 日志实现
- `org.springframework.boot.logging.java.JavaLoggingSystem`
![image-20200323144523848](../../images/SpringBoot/image-20200323144523848.png)
![image-20200323144523848](../../images/SpringBoot/image-20200323144523848.png)
```JAVA
```java
static {
// KEY : springBoot 定义的日志级别, value: jdk 定义的日志级别
LEVELS.map(LogLevel.TRACE, Level.FINEST);
@ -32,18 +32,16 @@ public enum LogLevel {
LEVELS.map(LogLevel.FATAL, Level.SEVERE);
LEVELS.map(LogLevel.OFF, Level.OFF);
}
```
```
- LEVELS 对象
```java
protected static class LogLevels<T> {
/**
* key SpringBoot 中定义的日志级别, value: 其他日志框架的日志级别
*/
private final Map<LogLevel, T> systemToNative;
/**
* key : 其他日志框架的日志级别 , value: springBoot 中定义中定义的日志级别
*/
@ -58,7 +56,7 @@ public enum LogLevel {
- 一个 map 对象: `SYSTEMS`
```JAVA
```java
/**
* key: 第三方日志框架的类 value: springBoot 中的处理类
*/
@ -72,20 +70,19 @@ public enum LogLevel {
systems.put("java.util.logging.LogManager", "org.springframework.boot.logging.java.JavaLoggingSystem");
SYSTEMS = Collections.unmodifiableMap(systems);
}
```
```
- 各个抽象方法
| 方法名称 | 作用 |
| ----------------------- | ---------------------------------- |
| beforeInitialize | 初始化之前调用,目的是减少日志输出 |
| initialize | 初始化日志 |
| cleanUp | 清除日志 |
| getShutdownHandler | |
| getSupportedLogLevels | 获取支持的日志级别 |
| setLogLevel | 设置日志级别 |
| getLoggerConfigurations | 获取日志配置 |
| 方法名称 | 作用 |
| ----------------------- | ---------------------------------- |
| beforeInitialize | 初始化之前调用,目的是减少日志输出 |
| initialize | 初始化日志 |
| cleanUp | 清除日志 |
| getShutdownHandler | |
| getSupportedLogLevels | 获取支持的日志级别 |
| setLogLevel | 设置日志级别 |
| getLoggerConfigurations | 获取日志配置 |
### get
@ -108,13 +105,13 @@ public static LoggingSystem get(ClassLoader classLoader) {
// 实例化具体日志
get(classLoader, entry.getValue())).findFirst()
.orElseThrow(() -> new IllegalStateException("No suitable logging system located"));
}
}
```
- 实例化日志系统
```java
private static LoggingSystem get(ClassLoader classLoader, String loggingSystemClass) {
private static LoggingSystem get(ClassLoader classLoader, String loggingSystemClass) {
try {
Class<?> systemClass = ClassUtils.forName(loggingSystemClass, classLoader);
Constructor<?> constructor = systemClass.getDeclaredConstructor(ClassLoader.class);
@ -124,7 +121,7 @@ public static LoggingSystem get(ClassLoader classLoader) {
catch (Exception ex) {
throw new IllegalStateException(ex);
}
}
}
```
@ -138,14 +135,14 @@ public static LoggingSystem get(ClassLoader classLoader) {
![image-20200323154205484](../../images/SpringBoot/image-20200323154205484.png)
- 链路
- 链路
1. `org.springframework.boot.context.logging.LoggingApplicationListener#onApplicationEvent`
2. `org.springframework.boot.context.logging.LoggingApplicationListener#onApplicationStartingEvent`
3. `org.springframework.boot.logging.LoggingSystem#beforeInitialize`
- 因为前文中我们已知对象是:`org.springframework.boot.logging.logback.LogbackLoggingSystem` 直接看这个类的**`beforeInitialize`**方法
- 因为前文中我们已知对象是:`org.springframework.boot.logging.logback.LogbackLoggingSystem` 直接看这个类的 `beforeInitialize` 方法
```JAVA
```java
@Override
public void beforeInitialize() {
// 日志上下文
@ -159,7 +156,6 @@ public static LoggingSystem get(ClassLoader classLoader) {
// 添加过滤器
loggerContext.getTurboFilterList().add(FILTER);
}
```
- 初始化之前的的操作完成了初始化方法开始
@ -168,7 +164,7 @@ public static LoggingSystem get(ClassLoader classLoader) {
- `org.springframework.boot.context.logging.LoggingApplicationListener#onApplicationEnvironmentPreparedEvent`
```JAVA
```java
private void onApplicationEnvironmentPreparedEvent(ApplicationEnvironmentPreparedEvent event) {
if (this.loggingSystem == null) {
this.loggingSystem = LoggingSystem.get(event.getSpringApplication().getClassLoader());
@ -180,7 +176,7 @@ public static LoggingSystem get(ClassLoader classLoader) {
- `org.springframework.boot.context.logging.LoggingApplicationListener#initializeSystem`
```JAVA
```java
protected void initialize(ConfigurableEnvironment environment, ClassLoader classLoader) {
new LoggingSystemProperties(environment).apply();
this.logFile = LogFile.get(environment);
@ -199,7 +195,7 @@ public static LoggingSystem get(ClassLoader classLoader) {
```
```JAVA
```java
private void initializeSystem(ConfigurableEnvironment environment, LoggingSystem system, LogFile logFile) {
LoggingInitializationContext initializationContext = new LoggingInitializationContext(environment);
String logConfig = environment.getProperty(CONFIG_PROPERTY);
@ -220,12 +216,11 @@ public static LoggingSystem get(ClassLoader classLoader) {
}
}
}
```
- `org.springframework.boot.logging.logback.LogbackLoggingSystem#initialize`
```java
```java
@Override
public void initialize(LoggingInitializationContext initializationContext, String configLocation, LogFile logFile) {
LoggerContext loggerContext = getLoggerContext();
@ -242,11 +237,11 @@ public static LoggingSystem get(ClassLoader classLoader) {
}
}
```
```
- `org.springframework.boot.logging.AbstractLoggingSystem#initializeWithConventions`
```JAVA
```java
private void initializeWithConventions(LoggingInitializationContext initializationContext, LogFile logFile) {
String config = getSelfInitializationConfig();
if (config != null && logFile == null) {
@ -264,12 +259,11 @@ public static LoggingSystem get(ClassLoader classLoader) {
// 加载默认配置
loadDefaults(initializationContext, logFile);
}
```
- `org.springframework.boot.logging.logback.LogbackLoggingSystem#loadDefaults`
- `org.springframework.boot.logging.logback.LogbackLoggingSystem#loadDefaults`
```JAVA
```java
@Override
protected void loadDefaults(LoggingInitializationContext initializationContext, LogFile logFile) {
LoggerContext context = getLoggerContext();
@ -290,10 +284,9 @@ public static LoggingSystem get(ClassLoader classLoader) {
new DefaultLogbackConfiguration(initializationContext, logFile).apply(configurator);
context.setPackagingDataEnabled(true);
}
```
```JAVA
```java
@Override
public void initialize(LoggingInitializationContext initializationContext, String configLocation, LogFile logFile) {
LoggerContext loggerContext = getLoggerContext();
@ -312,69 +305,66 @@ public static LoggingSystem get(ClassLoader classLoader) {
+ "' system property. Please use 'logging.config' instead.");
}
}
```
```
标记`markAsInitialized`
- 标记 `markAsInitialized`
```JAVA
```java
private void markAsInitialized(LoggerContext loggerContext) {
loggerContext.putObject(LoggingSystem.class.getName(), new Object());
}
```
```
此时日志初始化完成
此时日志初始化完成。
### 默认配置文件
- `getStandardConfigLocations` 这个方法定义了默认配置文件有哪些
- `getStandardConfigLocations` 这个方法定义了默认配置文件有哪些
```java
```java
@Override
protected String[] getStandardConfigLocations() {
return new String[] { "logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml" };
}
```
```
- 切回`org.springframework.boot.logging.AbstractLoggingSystem#initializeWithConventions`方法
- 切回 `org.springframework.boot.logging.AbstractLoggingSystem#initializeWithConventions` 方法
- 添加依赖
```XML
```XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>${revision}</version>
</dependency>
```
```
- 添加配置文件
![image-20200323161442058](../../images/SpringBoot/image-20200323161442058.png)
![image-20200323161442058](../../images/SpringBoot/image-20200323161442058.png)
![image-20200323161522570](../../images/SpringBoot/image-20200323161522570.png)
![image-20200323161522570](../../images/SpringBoot/image-20200323161522570.png)
- 此时配置文件地址出现了
```JAVA
```java
protected String getSelfInitializationConfig() {
// 寻找配置文件
return findConfig(getStandardConfigLocations());
}
```
```
```JAVA
```java
@Override
protected String[] getStandardConfigLocations() {
return new String[] { "logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml" };
}
```
```
```JAVA
```java
private String findConfig(String[] locations) {
for (String location : locations) {
ClassPathResource resource = new ClassPathResource(location, this.classLoader);
@ -384,28 +374,26 @@ public static LoggingSystem get(ClassLoader classLoader) {
}
return null;
}
```
```
- 此时自定义配置文件如何获取的已经明了
- 此时自定义配置文件如何获取的已经明了。
#### reinitialize
```JAVA
@Override
protected void reinitialize(LoggingInitializationContext initializationContext) {
```java
@Override
protected void reinitialize(LoggingInitializationContext initializationContext) {
// 日志上下文重新设置
getLoggerContext().reset();
getLoggerContext().getStatusManager().clear();
// 加载配置文件
loadConfiguration(initializationContext, getSelfInitializationConfig(), null);
}
}
```
```JAVA
@Override
protected void loadConfiguration(LoggingInitializationContext initializationContext, String location,
```java
@Override
protected void loadConfiguration(LoggingInitializationContext initializationContext, String location,
LogFile logFile) {
// 父类方法
super.loadConfiguration(initializationContext, location, logFile);
@ -431,12 +419,12 @@ public static LoggingSystem get(ClassLoader classLoader) {
if (errors.length() > 0) {
throw new IllegalStateException(String.format("Logback configuration error detected: %n%s", errors));
}
}
}
```
```java
private void configureByResourceUrl(LoggingInitializationContext initializationContext, LoggerContext loggerContext,
private void configureByResourceUrl(LoggingInitializationContext initializationContext, LoggerContext loggerContext,
URL url) throws JoranException {
if (url.toString().endsWith("xml")) {
// logback 日志操作
@ -449,8 +437,8 @@ public static LoggingSystem get(ClassLoader classLoader) {
else {
new ContextInitializer(loggerContext).configureByResource(url);
}
}
}
```
- 执行配置属于 logback 操作源码不在此进行分析
执行配置属于 logback 操作源码不在此进行分析