springboot logback多环境日志输出配置
一、需求:
- 使用spring boot 用自带的logback打印日志
- 多环境打印
- 生产环境输出到控制台和文件,一天一个文件,保留30天
- 开发环境输出到控制台
二、logback-spring.xml配置文件详情
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--引入默认的一些设置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--web信息-->
<logger name="org.springframework.web" level="info"/>
<!--写入日志到控制台的appender,用默认的,但是要去掉charset,否则windows下tomcat下乱码-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_PATH" value="D:/tmp/logs/test2/"/>
<!--写入日志到文件的appender-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,每天一个文件-->
<FileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--异步到文件-->
<appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>500</queueSize>
<appender-ref ref="FILE"/>
</appender>
<!--生产环境:打印控制台和输出到文件-->
<springProfile name="prod">
<root level="info">
<appender-ref ref="asyncFileAppender"/>
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!--开发环境:打印控制台-->
<springProfile name="dev">
<!--需要debug级别的日志单独配置-->
<logger name="com.test" level="debug"/>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
</configuration>
三、application.yml中添加多环境配置
spring:
profiles:
active: dev
如果是正式环境,替换成 prod
四、测试配置是否成功
java代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
@Slf4j
public class TestController {
@GetMapping(value = "test")
public String test(){
log.debug(" -> debug");
log.warn(" -> warn");
log.info(" -> info");
log.error(" -> error");
return "1";
}
}
开发环境下调用接口,发现控制台打印日志,日志文件虽然会生成,但没有输入任何日志。
切换到生产环境后,控制台和日志文件都有日志输出,但只会输出info级别以上的日志。和配置文件中的配置相同。
五、配置不同级别的日志输出到不同文件
生产环境下,上述的配置方法足以满足需求。只是系统所有的日志全部输出到同一个文件,导致排查问题的时候,日志太多,影响判断。
现想将生产环境下不同级别的日志输出到不同的文件中。
修改logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--引入默认的一些设置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--web信息-->
<logger name="org.springframework.web" level="info"/>
<!--写入日志到控制台的appender,用默认的,但是要去掉charset,否则windows下tomcat下乱码-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="D:/tmp/logs/test2"/>
<property name="INFO_LOG_FILE" value="${logPath}/%d{yyyy-MM-dd}.info.log"/>
<property name="WARN_LOG_FILE" value="${logPath}/%d{yyyy-MM-dd}.warn.log"/>
<property name="ERROR_LOG_FILE" value="${logPath}/%d{yyyy-MM-dd}.error.log"/>
<!--info级别的日志写入到文件的appender-->
<appender name="INFO_LOG_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,每天一个文件-->
<FileNamePattern>${INFO_LOG_FILE}</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 日志格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--warn级别的日志写入到文件的appender-->
<appender name="WARN_LOG_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,每天一个文件-->
<FileNamePattern>${WARN_LOG_FILE}</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 日志格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--info级别的日志写入到文件的appender-->
<appender name="ERROR_LOG_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,每天一个文件-->
<FileNamePattern>${ERROR_LOG_FILE}</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 日志格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--info级别日志异步到文件-->
<appender name="INFO_ASYNC_FILE_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>500</queueSize>
<appender-ref ref="INFO_LOG_FILE_APPENDER"/>
</appender>
<!--warn级别日志异步到文件-->
<appender name="WARN_ASYNC_FILE_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>500</queueSize>
<appender-ref ref="WARN_LOG_FILE_APPENDER"/>
</appender>
<!--info级别日志异步到文件-->
<appender name="ERROR_ASYNC_FILE_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>500</queueSize>
<appender-ref ref="ERROR_LOG_FILE_APPENDER"/>
</appender>
<!--生产环境:打印控制台和输出到文件-->
<springProfile name="prod">
<root level="info">
<!--配置info级别的日志输出-->
<appender-ref ref="INFO_ASYNC_FILE_APPENDER"/>
<!--配置warn级别的日志输出-->
<appender-ref ref="WARN_ASYNC_FILE_APPENDER"/>
<!--配置error级别的日志输出-->
<appender-ref ref="ERROR_ASYNC_FILE_APPENDER"/>
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!--开发环境:打印控制台-->
<springProfile name="dev">
<!--需要debug级别的日志单独配置-->
<logger name="com.test" level="debug"/>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
</configuration>
上述配置可以将不同级别的日志输输入到不同的文件中。
评论区
请写下您的评论...
猜你喜欢
框架
1540
录等日志级别在application.yml中配置application.ymllog:path:D:\data\log#日志输出路径level:WARN#输出日志的等级
redis,springboot
1987
一、springboot集成redis一般配置pomdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot
框架
2916
1.配置springboot支持websocketpackagecom.example.demo.websocket
java项目
1394
springboot+mybatis配置多数据源并利用aop实现自动切换(demo)
框架
1931
springboot+mybatis配置多数据源并利用aop实现自动切换1.项目大致结构2.pom依赖dependencygroupIdorg.springframework.boot
blog
springboot(1)创建项目
框架
2376
第一次学习springboot框架环境idea-maven(eclipse更简单)1.先创建一个maven项目这样项目就创建好了2.配置pom文件?xmlversion="1.0"encoding
框架
3610
1.测试项目分布:2.测试数据库分布:有两个数据库1.main2.second3.项目yml配置文件:server:port:8888servlet:context-path:/#项目路径
blog
日志log4j.properties配置
框架
2925
日志log4j.properties配置1.完整示例:##屏蔽com.mchange.v2包下面的debug,info,warn信息##log4j.logger.xxx=error意为屏蔽xxx包下
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。