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";
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() {
String username = "yoyo";
String password = "123456";
log.debug("debug");
log.info("info");
log.error("【用户信息】username={},password={}", username, password);
return "hello world";
}
}
3.在yml文件里简单配置日志相关内容–真实项目中应该不会用
logging:
pattern:
console: "%d - %msg%n"
file: /var/nrsc/log/logger.log
level:
com.nrsc.logger.controller.LoggerTest: 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>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<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>
<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>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<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>
<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>
<root level="INFO">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>
5.做了个小demo — 真实项目中应该可以直接使用
demo地址