一)背景
至于为啥把现在这些springboot简单的功能重新编写一遍,一个方面是为了加深印象,并重新学习一下。一方面是这些功能都是项目中比较常用的,都是从真实项目中把功能剥离单点编写出来,也方便别人学习并使用。
二)说明
由于springboot的核心代码已经集成了相关的日志组件,所以就不需要在pom.xml中引入相关的jar了,至于为啥要重写logback文件,一方面是为了定义日志打印的格式,一方面可以把日志指定异步生成等,方便排查问题。
三)pom.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>
<groupId>com.oysept.springboot</groupId>
<artifactId>oysept-springboot-logback</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>oysept-springboot-logback</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/>
</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</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
四)在resources下创建一个logback.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 定义变量,日志文件名 -->
<property name="appName" value="oysept-springboot-logback" />
<property name="baseFile" value="oysept-springboot-logback"></property>
<!-- 日志文件存放在根目录下 /app/oysept-springboot-logback/logs文件夹中-->
<property name="rootPath" value="/app/oysept-springboot-logback/logs" />
<!-- 日志打印级别 -->
<property name="log.root.level" value="INFO"></property>
<!-- 设置上下文名称 -->
<contextName>${appName}</contextName>
<!-- 把日志在控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%X{thread} [%date{yyyy-MM-dd HH:mm:ss.SSS}] %level %logger{36} %line - %msg%n</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 文件输出日志 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${rootPath}/${baseFile}.log</File>
<!-- 日志文件rolling策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${rootPath}/${baseFile}_%d{yyyy-MM-dd}.log.gz</FileNamePattern>
<!-- 日志保留天数 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- 日志输出格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%X{thread} [%date{yyyy-MM-dd HH:mm:ss.SSS}] %level %logger{36} %line - %msg%n</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 文件输出日志 (文件大小策略进行文件输出,每小时产生一个日志文件给异常监控平台进行分析) -->
<appender name="ERRORFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${rootPath}/${baseFile}_error.log</File>
<!-- 日志文件rolling策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${rootPath}/${baseFile}_error_%d{yyyy-MM-dd}.log.gz
</FileNamePattern>
<!-- 日志保留天数 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 日志输出格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%X{thread} [%date{yyyy-MM-dd HH:mm:ss.SSS}] %level %logger{36} %line - %msg%n</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>10000</queueSize>
<appender-ref ref="FILE" />
</appender>
<logger name="org.springframework" additivity="false">
<level value="INFO" />
<appender-ref ref="STDOUT" />
<appender-ref ref="ASYNC" />
<appender-ref ref="ERRORFILE" />
</logger>
<logger name="org.apache.commons" level="WARN">
<appender-ref ref="ERRORFILE" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="ASYNC" />
<appender-ref ref="ERRORFILE" />
</root>
</configuration>
五)添加日志打印样例
package com.oysept.springboot;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* springboot启动类
* @author ouyangjun
*/
@SpringBootApplication
public class LogBackApplication {
private final static Logger LOGGER = LoggerFactory.getLogger(LogBackApplication.class);
public static void main(String[] args) {
LOGGER.info("*************************LogBack Application Started begin*************************");
SpringApplication.run(LogBackApplication.class, args);
LOGGER.info("*************************LogBack Application Started end*************************");
}
}
六)项目结构层级图(application.properties文件中只有server.port=8080)
七)运行LogBackApplication.java,会在根目录D:\app\oysept-springboot-logback\logs按日期生成日志文件
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!