|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- # spring-boot-demo-logback
-
- > 此 demo 主要演示了如何使用 logback 记录程序运行过程中的日志,以及如何配置 logback,可以同时生成控制台日志和文件日志记录,文件日志以日期和大小进行拆分生成。
-
- ## pom.xml
-
- ```xml
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>spring-boot-demo-logback</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <packaging>jar</packaging>
-
- <name>spring-boot-demo-logback</name>
- <description>Demo project for Spring Boot</description>
-
- <parent>
- <groupId>com.xkcoding</groupId>
- <artifactId>spring-boot-demo</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </parent>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
- </dependencies>
-
- <build>
- <finalName>spring-boot-demo-logback</finalName>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>
- ```
-
- ## SpringBootDemoLogbackApplication.java
-
- ```java
- /**
- * <p>
- * 启动类
- * </p>
- *
- * @author yangkai.shen
- * @date Created in 2018-09-30 23:16
- */
- @SpringBootApplication
- @Slf4j
- public class SpringBootDemoLogbackApplication {
-
- public static void main(String[] args) {
- ConfigurableApplicationContext context = SpringApplication.run(SpringBootDemoLogbackApplication.class, args);
- int length = context.getBeanDefinitionNames().length;
- log.trace("Spring boot启动初始化了 {} 个 Bean", length);
- log.debug("Spring boot启动初始化了 {} 个 Bean", length);
- log.info("Spring boot启动初始化了 {} 个 Bean", length);
- log.warn("Spring boot启动初始化了 {} 个 Bean", length);
- log.error("Spring boot启动初始化了 {} 个 Bean", length);
- try {
- int i = 0;
- int j = 1 / i;
- } catch (Exception e) {
- log.error("【SpringBootDemoLogbackApplication】启动异常:", e);
- }
- }
- }
- ```
-
- ## logback-spring.xml
-
- ```xml
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
- <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <level>INFO</level>
- </filter>
- <encoder>
- <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
- <charset>UTF-8</charset>
- </encoder>
- </appender>
-
- <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高, 所以我们使用下面的策略,可以避免输出 Error 的日志-->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <!--过滤 Error-->
- <level>ERROR</level>
- <!--匹配到就禁止-->
- <onMatch>DENY</onMatch>
- <!--没有匹配到就允许-->
- <onMismatch>ACCEPT</onMismatch>
- </filter>
- <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
- <!--<File>logs/info.spring-boot-demo-logback.log</File>-->
- <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
- <FileNamePattern>logs/spring-boot-demo-logback/info.created_on_%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
- <!--只保留最近90天的日志-->
- <maxHistory>90</maxHistory>
- <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
- <!--<totalSizeCap>1GB</totalSizeCap>-->
- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
- <maxFileSize>2MB</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
- <!--<maxFileSize>1KB</maxFileSize>-->
- <!--</triggeringPolicy>-->
- <encoder>
- <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
- <charset>UTF-8</charset> <!-- 此处设置字符集 -->
- </encoder>
- </appender>
-
- <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>Error</level>
- </filter>
- <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。-->
- <!--<File>logs/error.spring-boot-demo-logback.log</File>-->
- <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
- <FileNamePattern>logs/spring-boot-demo-logback/error.created_on_%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
- <!--只保留最近90天的日志-->
- <maxHistory>90</maxHistory>
- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->
- <maxFileSize>2MB</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <encoder>
- <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
- <charset>UTF-8</charset> <!-- 此处设置字符集 -->
- </encoder>
- </appender>
-
- <root level="info">
- <appender-ref ref="CONSOLE"/>
- <appender-ref ref="FILE_INFO"/>
- <appender-ref ref="FILE_ERROR"/>
- </root>
- </configuration>
- ```
-
|