一、Logback简介
Logback是一个功能强大的日志框架,可以替代log4j和java.utils.logging。其特点是速度最快,具有丰富的API和灵活的配置选项。Logback除了与Java编程语言集成紧密之外,还可以集成于Spring框架之上。Logback的核心组件是模块化的,可以使用适当的模块进行完全自定义的配置。此外,Logback还有许多有用的附加功能,例如日志文件压缩、数据库日志记录、灵活的上下文档案并支持异步路由和过滤器链等功能。
二、Logback的架构
Logback的架构包含三种主要的组件:Logger、Appender和Layout。Logger组件负责生成日志记录,Appender组件负责将日志记录输出到适当类型的目的地,Layout组件负责格式化日志事件的表示。
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="false"> <!--定义信息输出到控制台上的参数--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- logback 默认采用 Filter 来实现日志过滤 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>TRACE</level> </filter> <encoder> <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg [%file:%line]%n</pattern> </encoder> </appender> <!--定义信息输出到文件上的参数--> <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 定义过滤器,只输出INFO级别以上的日志到文件中--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <file>logs/debug.log</file> <!-- 日志输出路径--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/debug.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> <maxHistory>30</maxHistory> <!--log文件保留最多30个备份--> <totalSizeCap>5GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%-d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern> </encoder> </appender> <!--定义日志记录器--> <logger name="com.cloudfire" level="info"> <appender-ref ref="console" /> <appender-ref ref="fileAppender" /> </logger> <root level="info"> <appender-ref ref="console" /> <appender-ref ref="fileAppender" /> </root> </configuration>
三、Logback-Spring.xml配置示例
下面是一个Logback-Spring.xml配置文件示例,在这个示例中,使用了控制台和文件两个Appender,在级别为INFO的情况下,将日志记录到文件中。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml PUBLIC "-//SPRING//DTD LOGGING//EN" "http://www.springframework.org/dtd/spring-logging.dtd"> <configuration debug="true"> <!--定义info日志输出到文件.--> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/data/logs/cm_db/cm_db-info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/logs/cm_db/cm_db-info_%d{yyyyMMdd}.log.zip</fileNamePattern> <maxHistory>7</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!--定义debug日志输出到文件.--> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/data/logs/cm_db/cm_db-debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/logs/cm_db/cm_db-debug_%d{yyyyMMdd}.log.zip</fileNamePattern> <maxHistory>7</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!--定义error日志输出到文件.--> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/data/logs/cm_db/cm_db-error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/logs/cm_db/cm_db-error_%d{yyyyMMdd}.log.zip</fileNamePattern> <maxHistory>7</maxHistory> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!--定义输出格式.--> <!--trace<debug<info<warn<error<fatal--> <root level="INFO"> <appender-ref ref="console" /> <appender-ref ref="infoAppender" /> <appender-ref ref="debugAppender" /> <appender-ref ref="errorAppender" /> </root> </configuration>
四、如何集成Logback到Spring Boot应用
在Spring Boot应用中,需要在pom.xml中加入以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
之后,创建logback-spring.xml文件并放置在class path或者根目录下即可。
五、Logback与Spring框架的深度集成
在使用Spring框架时,如果想要使用Logback作为日志框架,那么你可以使用Spring Boot框架,它会自动配置Logback,使得Spring应用轻松地使用Logback。Spring Boot支持以下几种日志框架:log4j,Log4j2,JUL(java.utils.logging,Java's built-in logging framework)和Logback。Spring Boot提供了一种简单的方法来切换这些框架:替换后就可以使用一个不同的jar文件了。
<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>logback-classic</artifactId> <version>1.2.3</version> </dependency>
六、总结
Logback-Spring.xml配置文件是配置Logback日志框架的关键文件之一,通过Logback日志框架,可以提供强大的日志记录和管理功能,从而优化应用程序的性能。在Spring Boot框架中,使用Logback日志框架创建和管理Spring应用程序的日志,可以无缝集成Logback日志框架并提供自动配置功能,使得开发人员可以轻松地使用Logback日志框架。