版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nrsc272420199/article/details/86632411
1.不借助lombok的情况下
package com.nrsc.logger.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LoggerTest {
@RequestMapping("/logger")
public String demo() {
Logger logger = LoggerFactory.getLogger(LoggerTest.class);
String username = "yoyo";
String password = "123456";
//默认情况下debug日志不会被打印出来,可以参看application-test.yml中的配置,来更改日志级别为debug使其显示
logger.debug("debug");
//默认日志级别
logger.info("info");
//项目里经常会这样用感觉挺好用的
logger.error("【用户信息】username={},password={}", username, password);
return "hello world";
}
}
2.借助lombok @Slf4j 注解
package com.nrsc.logger.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LoggerTest2 {
@RequestMapping("/logger2")
public String demo() {
//使用lombok的@Slf4j注解,下面这句话就不需要了,默认生成了一个Logger实例,名字为log
// Logger logger = LoggerFactory.getLogger(LoggerTest2.class);
String username = "yoyo";
String password = "123456";
//可以直接使用log打日志
log.debug("debug");
//默认日志级别
log.info("info");
//项目里经常会这样用感觉挺好用的
log.error("【用户信息】username={},password={}", username, password);
return "hello world";
}
}
3.在yml文件里简单配置日志相关内容–真实项目中应该不会用
logging:
pattern:
console: "%d - %msg%n"
#path: /var/nrsc/log
file: /var/nrsc/log/logger.log
level:
com.nrsc.logger.controller.LoggerTest: debug
#上面如果写root:debug就是将全局默认日志级别改为debug
4.logback-spring.xml里进行复杂配置–info和error分开
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<springProperty scope="context" name="appName" source="management.metrics.tags.appName"
defaultValue="appName"/>
<!--定义日志文件的存储地址-->
<property name="log.path" value="/var/nrsc"/>
<!--设置控制台日志输出格式-->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] ${appName} %-5level %logger:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--设置info日志的输出-->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--日志的级别设为ERROR-->
<level>ERROR</level>
<!--如果是出现了ERROR直接拒绝不管,走下面的日志处理即:fileErrorLog-->
<onMatch>DENY</onMatch>
<!--否则的话,会走此日志输出,按照日志级别来说ERROR下面还有WARN,INFO,DEBUG和TRACE,
但是我们在最下面设置了默认日志级别为INFO,因此在该文件里只会输出INFO和WARN日志-->
<onMismatch>ACCEPT</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy, aux}/%d{MM, aux}/%d{dd, aux}/info/info.%d{yyyy-MM-dd-HH}.log.gz
</fileNamePattern>
<maxHistory>2160</maxHistory> <!-- 90 day, 24 hours -->
<totalSizeCap>70GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${appName} %-5level %logger %L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--设置error日志-->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<!--注意:error日志的过滤类用ThresholdFilter-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy, aux}/%d{MM, aux}/%d{dd, aux}/error/error.%d{yyyy-MM-dd-HH}.log.gz
</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>2160</maxHistory> <!-- 90 day, 24 hours -->
<!--最大不能超过30GB -->
<totalSizeCap>30GB</totalSizeCap>
</rollingPolicy>
<encoder>
<!--日志输出格式-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${appName} %-5level %logger %L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--将上面的配置应用于整个项目,且默认日志级别设置为INFO-->
<root level="INFO">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>