SpringBoot 使用logback(多环境配置)

Logback是由log4j创始人设计的又一个开源日志组件。可用于项目日志功能。官网地址

第1步:添加坐标依赖

<!--logback-->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.14</version>
</dependency>

logback里依赖了slf4j,就不用单独添加slf4j坐标了

第2步:创建logback配置文件

在resources目录下创建logback文件夹,并创建dev.xml,pro.xml两个配置文件,用于配置开发环境和生产环境的logback配置。目录结构像这样:

第3步:在application.yaml中根据运行环境读取logback配置

#日志配置
logging:config: classpath:logback/${spring.profiles.active}.xml #根据运行环境读取日志配置

第4步:配置logback/dev.xml文件(开发环境的日志配置)

开发环境中,可以将日志打印在控制台。

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 设置控制台彩色日志格式,注意:%L打印行号对性能有影响,因此不建议在生产环境使用。 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wEx"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><property name="CONSOLE_LOG_PATTERN"value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/><!--设置输出到控制台--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8"><!-- 设置输出到控制台的日志格式 --><pattern>${CONSOLE_LOG_PATTERN}</pattern></encoder></appender><!--设置日志级别--><root level="INFO"><appender-ref ref="CONSOLE"/></root>
</configuration>

第5步:配置logback/pro.xml文件(生成环境的日志配置)

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 应用名称 --><springProperty scope="context" name="springApplicationName" source="spring.application.name"defaultValue="spring"/><!-- 环境 --><springProperty scope="context" name="springProfilesActive" source="spring.profiles.active" defaultValue="pro"/><!-- 重启后是否删除日志 --><springProperty scope="context" name="cleanHistoryOnStart"source="logging.logback.rollingpolicy.clean-history-on-start" defaultValue="true"/><!-- 单个日志文件的大小 --><springProperty scope="context" name="maxFileSize" source="logging.logback.rollingpolicy.max-file-size"defaultValue="10MB"/><!-- 日志总文件最大值 --><springProperty scope="context" name="totalSizeCap" source="logging.logback.rollingpolicy.total-size-cap"defaultValue="50GB"/><!-- 日志保留时长 (天) --><springProperty scope="context" name="maxHistory" source="logging.logback.rollingpolicy.max-history"defaultValue="30"/><!-- 日志文件路径 --><springProperty scope="context" name="path" source="logging.file.path"defaultValue="./log/${springApplicationName}/${springProfilesActive}"/><contextName>${springApplicationName}</contextName><property name="PATTERN_FILE" value="%d{yyyy/MM/dd-HH:mm:ss} %-5level [%thread] %class{5}:%line>>%msg%n"/><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${path}/%d{yyyy-MM-dd}/%i.log</fileNamePattern><totalSizeCap>${totalSizeCap}</totalSizeCap><maxHistory>${maxHistory}</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${maxFileSize}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><!-- 重启项目后删除日志 --><cleanHistoryOnStart>${cleanHistoryOnStart}</cleanHistoryOnStart></rollingPolicy><encoder><pattern>${PATTERN_FILE}</pattern></encoder></appender><!--设置日志级别--><root level="WARN"><appender-ref ref="FILE"/></root></configuration>

 第6步:测试日志输出

在Controller中编写测试代码:

import ch.qos.logback.classic.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/")
public class HomeController {private static final Logger logger = (Logger) LoggerFactory.getLogger(HomeController.class);@GetMapping("/")public String index() {logger.debug("【Debug】- Hello.");logger.info("【Info】- Hello.");logger.warn("【Warn】- Hello.");logger.error("【Error】- Hello.");return "index";}
}

1.测试开发环境:

在application.yaml文件中,配置:

spring:profiles:active: dev

运行项目,访问对应的地址,即可看到控制台日志输出:

2.测试生产环境:

在application.yaml文件中,配置:

spring:profiles:active: pro

 运行项目,访问对应的地址,即可看到对应目录下的日志输出:

这个日志存放路径,可以根据logback/pro.xml中fileNamePattern配置。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/704414.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NSSCTF | [SWPUCTF 2021 新生赛]easyupload2.0

先传一个普通的一句话木马试一试 GIF89a <?php eval($_POST[shell]);?> 可以看到回显&#xff0c;不允许上传php文件。 使用Burpsuite抓包只修改ContentType后发现也不能绕过&#xff0c;说明服务器使用了黑名单后缀限制&#xff0c;那么我们可以使用其他的后缀代替ph…

MYSQL SQL3

1.DCL:Global level 所有库&#xff0c;所有表的权限 Database level:某个数据库中所有表的权限 Table level: 库中某个表的权限 Column level:表中的某个字段的权限 管理:创建用户create user 用户名localhost(ip地址&#xff0c;“%”除了本机登录其他的都可以登录…

《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-02-信息加密技术

文章目录 1. 信息加密技术1.1 数据加密1.2 对称密钥加密算法1&#xff09;数据加密标准&#xff08;DES)2&#xff09;三重DES&#xff08;Triple-DES&#xff09;3&#xff09;国际数据加密算法&#xff08;IDEA&#xff09;4&#xff09;高级加密标准&#xff08;AES&#xf…

903. 昂贵的聘礼[dijsktra堆优化版]

题目描述 年轻的探险家来到了一个印第安部落里。 在那里他和酋长的女儿相爱了&#xff0c;于是便向酋长去求亲。 酋长要他用 10000 个金币作为聘礼才答应把女儿嫁给他。 探险家拿不出这么多金币&#xff0c;便请求酋长降低要求。 酋长说&#xff1a;”嗯&#xff0c;如果你能够…

MT2057 门票

思路&#xff1a; 此题是求有多少个区间的平均值>t&#xff0c; 那么可以把每个值-t。如果新的数列的某个区间的和>0&#xff0c;那么说明这个区间满足条件。 令新数列的前缀和为b[i]&#xff0c;所以求[i, j]区间是否满足条件&#xff0c;即求b[j]-b[i-1]是否>0&am…

k8s环境部署的集成arthas-spring-boot-starter spingboot项目无法访问控制台

前言 k8s环境部署的集成arthas-spring-boot-starter项目无法访问控制台&#xff0c;springboot项目集成arthas-spring-boot-starter 会自带个控制台 供我们访问 但是当使用k8s环境部署后 这个页面就无法访问了 分析 首先看下arthas对应的配置 arthas-spring-boot-starter 中…

多线程的代码案例

目录 单例模式 饿汉模式 懒汉模式 阻塞队列 生产者消费者模型意义: 阻塞队列使用方法 实现阻塞队列 阻塞队列实现生产者消费者模型 定时器 实现简单的定时器 工厂模式 线程池 为啥呢? 从池子里面取 比 创建线程 效率更高 线程池的创建 怎么填坑 ThreadPoolExec…

27.哀家要长脑子了!

目录 1.316. 去除重复字母 - 力扣&#xff08;LeetCode&#xff09; 2. 1209. 删除字符串中的所有相邻重复项 II - 力扣&#xff08;LeetCode 哎哟 烦死了 刚刚不小心退出又没保存 又要写一遍 烦死了 最近刷题不得劲啊 感觉这脑子没长一点 1.316. 去除重复字母 - 力扣&am…

java技术:nacos

目录 一、docker安装 1、创建一个nacos 2、复制配置信息出来&#xff08;方便修改配置文件&#xff09; 3、删除nacos 4、修改配置文件&#xff08;主要是一下几个&#xff09; 6、创建数据库 nacos 7、重启nacos mysql 一、docker安装 1、创建一个nacos docker run …

腾讯中视频项目,日均收益1000+,简单搬运无限做,执行就有收入

兄弟们今天给大家分享的项目-腾讯视频的中视频计划项目&#xff0c;项目简单&#xff0c;低门槛&#xff0c;不需要考虑带货等问题&#xff0c;是2024年目前最火的变现赛道了。 因为目前来说的话&#xff0c;腾讯视频中视频是刚开始启动&#xff0c;是项目的红利期&#xff0c;…

(C语言)队列实现与用队列实现栈

目录 1.队列 1.1队列的概念及结构 1.2 队列的实际应用联想 1.3队列的实现 2. 队列应用——队列实现栈 主要思路 1.队列 1.1队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进…

Python 渗透测试:子域名查询.

什么是 子域名查询. 子域名查询是指通过域名系统(DNS)查找某个域名下的子域名信息。子域名是域名层级结构中的一部分,位于主域名的下一级。子域名查询是网络安全评估和渗透测试中的一个重要步骤,可以帮助安全研究人员更好地了解目标系统的架构和潜在的安全隐患。但在进行子域名…