网上的集成有很多,但是感觉都是零散的,想着自己搭建一个springboot+logback+lombok的线上服务器实战记录帖子

环境&版本一览:

  • 开发工具:Intellij IDEA 2020.1.1
  • springboot: 2.5.4
  • jdk:1.8.0
  • maven:3.8.3
  • SLF4j + Logback + Lombok

maven 配置

Logback 是spring-boot-starter-web默认实现,所以我们可以不引入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<version>2.5.4</version>
</dependency>
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.22</version>
	<optional>true</optional>
</dependency>
  • 日志的级别
public enum Level {
    ERROR(40, "ERROR"),
    WARN(30, "WARN"),
    INFO(20, "INFO"),   //默认级别
    DEBUG(10, "DEBUG"),
    TRACE(0, "TRACE");
// 上面最高,下面最低,日志级别从上往下看 `由高到底`

配置文件

在这里插入图片描述

服务器创建对应的文件夹
sudo mkdir -p /var/log/ql
sudo chmod -R 777 /var/log/ql

本地开发环境

application.properties

logging.level.root=info
logging.file.path=/var/log/ql
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [%method,%line] - %msg%n
logging.pattern.console== %white(%d{yyyy-MM-dd HH:mm:ss.SSS}) %cyan([%thread]) %yellow(%-5level) %magenta(%-50.50class) %green(%logger{20}) - %white([%method,%line]) - %yellow(%msg%n)
logging.logback.rollingpolicy.max-history=7
logging.logback.rollingpolicy.max-file-size=50MB
logging.logback.rollingpolicy.total-size-cap=5GB

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 日志存放路径 -->
	<!--	<property name="log.path" value="/var/log/ql"/>-->
	<springProperty scope="context" name="log.path" source="log.path" defaultValue="/var/log/default"/>
	<!-- 日志输出格式 -->
	<springProperty scope="context" name="logging.pattern.console" source="logging.pattern.console"
	                defaultValue="%white(%d{yyyy-MM-dd HH:mm:ss.SSS}) %cyan([%thread]) %yellow(%-5level) %magenta(%-50.50class) %green(%logger{20}) - %white([%method,%line]) - %cyan(%msg%n)"/>
	<!--	<property name="log.pattern"-->
	<!--	          value="%white(%d{yyyy-MM-dd HH:mm:ss.SSS}) %cyan([%thread]) %yellow(%-5level) %magenta(%-50.50class) %green(%logger{20}) - %white([%method,%line]) - %yellow(%msg%n)"/>-->
	<!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${logging.pattern.console}</pattern>
		</encoder>
	</appender>
	<!-- 系统模块日志级别控制  -->
	<logger name="com.ql.center" level="info"/>
	<!-- Spring日志级别控制  -->
	<logger name="org.springframework" level="warn"/>
	<root level="info">
		<appender-ref ref="console"/>
	</root>
	<!--系统操作日志-->
	<root level="info">
		<appender-ref ref="console"/>
	</root>
</configuration>

online 环境

resource/application.properties

logging.config=classpath:logback-spring-online.xml
logging.level.root=info
logging.file.path=/var/log/ql
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [%method,%line] - %msg%n
logging.pattern.console== %white(%d{yyyy-MM-dd HH:mm:ss.SSS}) %cyan([%thread]) %yellow(%-5level) %magenta(%-50.50class) %green(%logger{20}) - %white([%method,%line]) - %yellow(%msg%n)
logging.logback.rollingpolicy.max-history=7
logging.logback.rollingpolicy.max-file-size=50MB
logging.logback.rollingpolicy.total-size-cap=5GB

resource/logback-spring-online.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 日志存放路径 -->
	<springProperty scope="context" name="logging.file.path" source="logging.file.path" defaultValue="/var/log/default"/>

	<!-- 控制台日志输出格式 -->
	<springProperty scope="context" name="logging.pattern.file" source="logging.pattern.file"
	                defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [%method,%line] - %msg%n"/>

	<!-- 文件日志输出格式 -->
	<springProperty scope="context" name="logging.pattern.console" source="logging.pattern.console"
	                defaultValue="%white(%d{yyyy-MM-dd HH:mm:ss.SSS}) %cyan([%thread]) %yellow(%-5level) %magenta(%-50.50class) %green(%logger{20}) - %white([%method,%line]) - %cyan(%msg%n)"/>

	<springProperty scope="context" name="logging.logback.rollingpolicy.max-history"
	                source="logging.logback.rollingpolicy.max-history" defaultValue="3"/>
	<springProperty scope="context" name="logging.logback.rollingpolicy.max-file-size"
	                source="logging.logback.rollingpolicy.max-file-size" defaultValue="10MB"/>
	<springProperty scope="context" name="logging.logback.rollingpolicy.total-size-cap"
	                source="logging.logback.rollingpolicy.total-size-cap" defaultValue="1GB"/>
	<springProperty scope="context" name="logging.level.root"
	                source="logging.level.root" defaultValue="INFO"/>

	<!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${logging.pattern.console}</pattern>
		</encoder>
	</appender>

	<!-- 系统日志输出 -->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logging.file.path}/sys-info.log</file>
		<!-- 循环政策:基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!-- 日志文件名格式 -->
			<fileNamePattern>${logging.file.path}/sys-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<!-- 日志最大的历史 60-->
			<maxHistory>${logging.logback.rollingpolicy.max-history}</maxHistory>
			<!-- 每个日志文件的最大大小 -->
			<maxFileSize>${logging.logback.rollingpolicy.max-file-size}</maxFileSize>
			<!-- 总空间使用限制,例如1GB -->
			<totalSizeCap>${logging.logback.rollingpolicy.total-size-cap}</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>${logging.pattern.file}</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<!-- 过滤的级别 只会打印debug不会有info日志-->
			<level>${logging.level.root}</level>
			<!-- 匹配时的操作:接收(记录) -->
			<onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作:拒绝(不记录) -->
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	<appender name="file_warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logging.file.path}/sys-warn.log</file>
		<!-- 循环政策:基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!-- 日志文件名格式 -->
			<fileNamePattern>${logging.file.path}/sys-warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<!-- 日志最大的历史 60-->
			<maxHistory>${logging.logback.rollingpolicy.max-history}</maxHistory>
			<!-- 每个日志文件的最大大小 -->
			<maxFileSize>${logging.logback.rollingpolicy.max-file-size}</maxFileSize>
			<!-- 总空间使用限制,例如1GB -->
			<totalSizeCap>${logging.logback.rollingpolicy.total-size-cap}</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>${logging.pattern.file}</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<!-- 过滤的级别 只会打印debug不会有info日志-->
			<level>WARN</level>
			<!-- 匹配时的操作:接收(记录) -->
			<onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作:拒绝(不记录) -->
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logging.file.path}/sys-error.log</file>
		<!-- 循环政策:基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!-- 日志文件名格式 -->
			<fileNamePattern>${logging.file.path}/sys-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
			<!-- 日志最大的历史 60-->
			<maxHistory>${logging.logback.rollingpolicy.max-history}</maxHistory>
			<!-- 每个日志文件的最大大小 -->
			<maxFileSize>${logging.logback.rollingpolicy.max-file-size}</maxFileSize>
			<!-- 总空间使用限制,例如1GB -->
			<totalSizeCap>${logging.logback.rollingpolicy.total-size-cap}</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>${logging.pattern.file}</pattern>
			<charset>UTF-8</charset>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>ERROR</level>
		</filter>
	</appender>
	<!-- 用户访问日志输出  -->

	<!-- 系统模块日志级别控制  -->
	<logger name="com.ql.center" level="info"/>
	<!-- Spring日志级别控制  -->
	<logger name="org.springframework" level="warn"/>
	<root level="info">
		<appender-ref ref="console"/>
	</root>
	<!--系统操作日志-->
	<root level="info">
		<appender-ref ref="file_info"/>
		<appender-ref ref="file_warn"/>
		<appender-ref ref="file_error"/>
	</root>
</configuration>

开发代码

@Slf4j
@Api(tags = "账号相关信息")
@RestController
@RequestMapping("/account")
public class AccountController {
    private SysAccountManager sysAccountManager;

    @ApiOperation(value = "手机、密码登录", notes = "返回 RestBody<String> 类型")
    @ArchivesLog(allowEntry = true, methodMeaning = "《《手机、密码登录》》")
    @PostMapping(value = "/loginByMobile", produces = MediaType.APPLICATION_JSON_VALUE)
    public RestBody<String> loginByMobile(@RequestBody MobileLoginDTO dto) {
        log.debug("<<Im debug>>");
        log.info("<<Im info>>");
        log.warn("<<Im warn>>");
        log.error("<<Im error>>");
        return RestBody.success(sysAccountManager.doLoginMobile(dto));
    }
}
  • 项目启动后会看到
    在这里插入图片描述
  • 然后当logging.level.root=info
    • 会把log.info("<<Im info>>"); 打印到 sys-info.log 内。
    • 会把log.warn("<<Im warn>>"); 打印到 sys-warn.log 内。
    • 会把log.error("<<Im error>>"); 打印到 sys-error.log 内。
  • 然后当logging.level.root=error
    • 会把llog.error("<<Im error>>"); 打印到 sys-info.log 内。
    • 会把log.error("<<Im error>>"); 打印到 sys-error.log 内。

以上配置,线上环境基本可用,具体可根据自己的需求进行微调修改!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐