springboot自带slf4j框架和logback,我们可以移除spring的logging,然后再带入自己的日志框架。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
SLF4J (Simple Logging Facade for Java)
门面模式
SLF4J通过提供一个简单、高效且灵活的日志抽象层,使得Java应用能够更方便地管理和输出日志,同时降低了日志框架切换和升级的成本和复杂性。
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public void someMethod() {
// 日志输出示例
logger.debug("Debug message");
logger.info("Info message");
logger.warn("Warning message");
logger.error("Error message");
}
}
Log4j又分为log4j1和log4j2,直接使用log4j2
使用slf4j和log4j我们需要引入:
- log4j-slf4j-impl
- log4j-core
- log4j-api
或者直接使用springboot的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
配置
在application目录下配置log4j-spring.xml或者log4j.xml文件,从而配置log4j
- 输出位置:控制台,文件,远程服务器
- 日志级别
- 日志格式
日志记录器(Logger)实际上是对日志消息进行管理和分类的组件,它负责决定哪些日志消息应该被记录以及以什么方式记录。记录器会将日志消息传递给一个或多个追加器(Appender),由追加器负责将日志消息输出到实际的目标(如文件、控制台、数据库等)。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<!-- 配置属性 -->
<Properties>
<Property name="log-path">logs/app.log</Property>
</Properties>
<!-- 配置追加器 -->
<Appenders>
<!-- 控制台追加器 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 文件追加器 -->
<File name="File" fileName="${log-path}" append="true">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n"/>
<!-- 文件滚动策略 -->
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10MB" />
</Policies>
<!-- 滚动文件策略 -->
<DefaultRolloverStrategy max="5"/>
</File>
</Appenders>
<!-- 配置日志记录器 -->
<Loggers>
<!-- 根记录器:Root 日志记录器通常用于配置整个应用程序的全局日志记录行为,如果没有为特定的 Logger 配置,日志消息就会被 Root 日志记录器处理。 -->
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
<!-- 自定义记录器 -->
<Logger name="com.example" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
</Loggers>
</Configuration>
log4j中一个类使用按个记录器:最精确匹配
Log4j2 将优先选择名称最精确匹配的记录器。例如,如果你有一个记录器配置为 com.example,而另一个配置为 com.example.MyClass,那么 MyClass 类的日志消息将使用后者的配置。
例子:
additivity:是否父级传播(自己实现还会传递父级再实现)
level=“debug” 表示该记录器的日志级别是 debug。这意味着只有 debug 级别及更高级别(如 info、warn、error)的日志消息会被记录。
<Loggers>
<!-- 记录器1: com.example.MyClass -->
<Logger name="com.example.MyClass" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<!-- 记录器2: com.example 包 -->
<Logger name="com.example" level="info" additivity="false">
<AppenderRef ref="File"/>
</Logger>
<!-- Root 记录器 -->
<Root level="warn">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
Logback:springboot的默认日志框架
在application目录下配置logback-spring.xml文件或者logback.xml文件,从而配置logback