spring boot logback配置解析

记录下来,以后备用。。

主要是实现了

1.日志的info 和error 日志分类 存放 

2.每日生成日志

3.相关参数解析

小知识:

日志等级

debug 级别最低,可以随意的使用于任何觉得有利于在调试时更详细的了解系统运行状态的东东;

info  重要,输出信息:用来反馈系统的当前状态给最终用户的;

warn, 可修复,系统可继续运行下去;

Error, 可修复性,但无法确定系统会正常的工作下去;

从低到高

debug-》info-》warn-》Error

----------------------------------------------------------------------------------------------------------------------------------

demo项目生成是在 http://start.spring.io/ 中 

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.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</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>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.2</version>
		</dependency>

		<!-- log -->
		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.25</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.25</version>
			<!-- <scope>test</scope> -->
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>


logback主要是使用了 @Slf4j 

这个注释代替了

private static final  Logger logger = LoggerFactory.getLogger(xxx.class);
而且 @Slf4j 有内置log对象


idea 使用该注释时 可能会出现log对象不存在 

对应的解决方案在 https://blog.csdn.net/return_true_hang/article/details/79325195 这篇博客中有解决方案

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class DemoApplicationTests {

	@Test
	public void contextLoads() {

		String name = "TestName";
		String passWord = "TestPassword";

		log.debug("debug....");
		log.info("name: {} ,password : {}",name, passWord);
		log.error("error....");
	}

}

{}是占位符 一个占位符对应一个参数。。。

logback 配置分为yml 和xml 两种形式 

yml 是简单配置,能够配置较为简单的属性

这里我们使用xml的形式

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
    <appender name="consolelog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
             %d - %msg%n
            </pattern>
        </layout>
    </appender>

    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>DENY</onMatch>
        <onMismatch>ACCEPT</onMismatch>
    </filter>
    <encoder>
        <pattern>
            %d - %msg%n
        </pattern>
    </encoder>
    <!-- 滚动策略 -->
    <rollingPolicy class ="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 路径 -->
        <fileNamePattern>/var/log/tomcat/sell/info.%d.log</fileNamePattern>
    </rollingPolicy>
</appender>

    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %d - %msg%n
            </pattern>
        </encoder>
        <!-- 滚动策略 -->
        <rollingPolicy class ="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 路径 -->
            <fileNamePattern>/var/log/tomcat/sell/error.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <root level="info">
        <appender-ref ref="consolelog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
    </root>

</configuration>

上面的xml配置 实现了

1.日志的info 和error 日志分类 存放 

2.每日生成日志

<appender> 有两个属性 name 和class ,一个完整的<appender></appender> 称为 一个规则

name 是指该 appender(规则) 的名字  class 是指定用什么类去实现该appender (规则)(没有查资料,自身理解。。如有错误还望指出)

 <layout> 这是一个展示的标签, class 属性是指定 用什么类实现 我们这里使用 

ch.qos.logback.classic.PatternLayout

这句话的意思采用什么格式化

%d 是输出日期

%msg 是输出消息

%n 是换行

<pattern>
   %d - %msg%n
</pattern>

这个是配置拦截器 指定了levelFilter 这个拦截器 主要是拦截日志等级

<filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>DENY</onMatch>
        <onMismatch>ACCEPT</onMismatch>
</filter>

<level>这个是配置要监控的等级

<onMatch> 是命中该等级时做的操作 

<onMismatch> 是未命中时做的操作

操作分三种 

DENY  禁止 

NEUTRAL  中立

ACCEPT 接受

禁止是 指不执行当前这条规则

中立是指 忽视当前规则 但是会往下查询有没有符合要求的规则

接受是指 执行当前这条规则

-------------------------------------------------------------------------------------------------------------------------

每天一个的滚动策略  ch.qos.logback.core.rolling.TimeBasedRollingPolicy

<rollingPolicy class ="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- 路径 -->
        <fileNamePattern>/var/log/tomcat/sell/info.%d.log</fileNamePattern>
</rollingPolicy>
根据范围进行过滤 

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>ERROR</level>
</filter>

这个filter 的特点是会打印出配置的等级以及向上的日志

例如:

配置为 info时 则会打印出 info,warn,error 这三个等级的日志 

这个是适用范围 就是把上面配置的规则 应用上去 ref 使用的值是 name的值

<root level="info">
        <appender-ref ref="consolelog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
 </root>


常见错误:

1.标签名在idea中的提醒并不算友好,要注意不要打错

2.要记得在<root>标签中应用上去


demo文件地址:https://download.csdn.net/download/minstrel007/10443752


猜你喜欢

转载自blog.csdn.net/minstrel007/article/details/80445837
今日推荐