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