目录

  • 1.介绍
  • (1)日志的输出格式
  • (2)导入依赖
  • (3)日志级别划分
  • 2.使用


1.介绍

SpringBoot默认就是使用slf4j作为日志门面,logback作为日志实现来记录日志,默认级别是info级别。
首先在application.yml配置文件配置日志配置文件的路径

# 记录日志
 logging:
   config: classpath:logback-spring.xml

一般是放在类路径的resources目录下;

Java 微服务 记录错误日志 微服务日志管理_log4j2

(1)日志的输出格式

%d{yyyy-MM-dd HH:mm:ss.sss} 日期格式
%c 当前类全限定名
%M 当前执行日志的方法
%L 行号
%thread 线程名称
%m 或者 %msg 信息
%n 换行

(2)导入依赖
<!--日志门面-->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-nop</artifactId>
  <version>1.7.2</version>
</dependency>
<!-- logback 日志依赖-->
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.1.2</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-core</artifactId>
  <version>1.1.2</version>
</dependency>
(3)日志级别划分
trace: 日志追踪信息
debug: 日志详细信息(默认)
info: 日志的关键信息
warn: 日志的警告信息
error: 日志的错误信息

下面看一下logback-spring.xml文件具体的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <!--定义日志文件的存储地址-->
    <property name="LOG_HOME" value="F:/Work/logs"/>
    <!--定义日志文件的输出样式-->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>

    <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名 -->
    <appender name="STDOUT_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d:表示日期   %thread:表示线程名  %-5level:级别从左显示5个字符宽度  %msg:日志消息   %n:是换行符-->
            <pattern>1-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!--高于level中设置的级别,则打印日志-->
            <onMatch>ACCEPT</onMatch>
            <!--低于level中设置的级别,则屏蔽日志-->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="ACCESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/access_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <!--日志文件最大的大小-->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--按照文件大小来进行拆分-->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    <appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/errors_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    <!--自定义 log -->
    <logger name="org.springframework.web" level="ERROR"/>
    <logger name="org.springboot.sample" level="ERROR"/>
    <logger name="com.aiun" level="DEBUG"/>

    <!--配置异步日志-->
    <appender name="ASYNC_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="ERROR_APPENDER"/>
    </appender>

    <!-- 开发、测试环境 -->
    <springProfile name="dev,test">
        <root level="DEBUG">
			<appender-ref ref="ACCESS_APPENDER" />
		</root>
    </springProfile>
    
	<!-- 所有环境都要记录错误日志 -->
    <root level="ERROR">
        <appender-ref ref="ASYNC_APPENDER"/>
    </root>

</configuration>

配置项里面有具体的说明

2.使用

做完配置后,在类里面这样引用:

@Service("iCategoryService")
public class CategoryServiceImpl implements ICategoryService {
    private Logger logger = LoggerFactory.getLogger(CategoryServiceImpl.class);
}

然后通过logger对象调用对应的日志级别方法
例如:

@Override
public ServerResponse<List<Category>> getChildrenParallelCategory(Integer categoryId) {
    List<Category> categoryList = categoryMapper.selectCategoryChildrenByParentId(categoryId);
    if (categoryList.isEmpty()) {
        logger.info("未找到当前分类的子分类");
    }
    return ServerResponse.createBySuccess(categoryList);
}

也可以传递参数

try{
	......
} catch(Exception e) {
	logger.error("xxx错误", e);
}

然后那个模块如果需要进行日志记录,就可以以这样的方式进行日志的配置