spring boot集成日志

news/2024/12/22 16:52:24/

1.spring boot集成日志

07 Springboot(new) · 语雀

1、导包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- springboot默认是用logback的日志框架的(性能差),所以需要排除logback,不然会出现jar依赖冲突的报错 --><exclusions><!-- 去掉springboot默认配置 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2、配置日志文件

在resources目录下,使用log4j2.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- status log4j2内部输出自身的日志信息的级别 -->
<!-- configuration中主要包括有 Properties、Appenders、Loggers标签 -->
<configuration status="INFO"><!-- 全局参数 --><Properties><Property name="log_dir">logs</Property><Property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %c{1}:%L -%m%n</Property><Property name="displayName">mes</Property></Properties><!-- 输出源,常见的主要有Console、RollingFile、File 三种子节点Console:用于定义输出到控制台的AppenderFile:用于定义输出到指定位置的文件的AppenderRollingFile:定义指定方式触发新的Appender--><Appenders><Console name="console" target="SYSTEM_OUT" follow="true"><PatternLayout><pattern>${pattern}</pattern></PatternLayout></Console>
​<!-- 文件 每次运行程序会自动清空,由append属性决定 --><!--<File name="error" fileName="${displayName}_error.log" append="false">--><!--&lt;!&ndash; 指定error 级别的日志 &ndash;&gt;--><!--<ThresholdFilter level="ERROR" onMatch="ACCEPT"--><!--onMismatch="DENY" />--><!--<PatternLayout>--><!--<pattern>${pattern}</pattern>--><!--</PatternLayout>--><!--</File>-->
​<!-- 滚动文件 达到触发条件,生成新的文件,原来的内容会存档,存档的文件根据filePatternt规则增加年月日 --><RollingFile name="infoFile" fileName="${log_dir}/${displayName}_info.log"filePattern="${log_dir}/${displayName}_%d{yyyy-MM-dd}_info.log"><!-- 本例表示只输出info日志
​onMatch 表示满足指定级别及以上级别onMisMatch 表示不满足指定级别,即指定级别以下的级别
​onMatch="ACCEPT" 指定级别及以上级别,接受onMatch="DENY" 指定级别及以上级别,拒绝
​onMismatch="NEUTRAL" 指定级别以下的放行,进行后面的判断onMismatch="deny" 指定级别以下的级别,拒绝--><Filters><ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="deny"/></Filters><PatternLayout><pattern>${pattern}</pattern></PatternLayout><!-- 按大小划分 --><SizeBasedTriggeringPolicy size="50 MB"/></RollingFile></Appenders><!-- 主要配置Root、Logger两种标签 --><Loggers><!-- Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等Logger标签内还可以配置一个或多个AppenderRef属性,用来指定日志输出到哪个Appender--><!--     <Logger name="org.springframework" level="INFO" /> -->
​<!-- additivity="false"表示子Logger只会在自己的appender里输出,而不会在Root的appender里输出 --><Logger name="org.springframework" level="INFO" additivity="false"><AppenderRef ref="console"></AppenderRef></Logger><Logger name="org.mybatis" level="info" additivity="false"><AppenderRef ref="console"></AppenderRef></Logger><!-- 每个配置都必须有一个根记录器Root,默认所有的Logger都继承此配置 --><Root level="DEBUG"><!-- AppenderRef 用来指定该日志输出到哪个Appender --><AppenderRef ref="console"></AppenderRef><AppenderRef ref="infoFile"></AppenderRef><!--<AppenderRef ref="rollingFile"></AppenderRef>--></Root></Loggers>
</configuration>
​

%d 输出日志时间点的日期(一般是那一天),也可以在其后用大括号自定义格式,比如:%d{yyyy MMM dd HH:mm:ss:SSS},输出类似:2014 11 05 :23:28 :22

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL ;

%r 输出自应用启动到输出该log信息耗费的毫秒数 ;

%c 输出所属的全类名,也可以只输出类名,:%c{1} ;

%t 输出产生该日志的当前线程名字 ;

%m 输出代码中自定义的的信息;

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” ;

3、手动输出日志

在需要输出日志的类中,创建日志对象

方式1:log4j2中的Logger对象

方式2:slf4j中的Logger对象

​
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
​
@Service
// 相当于在类中增加了 private static final Logger log = LoggerFactory.getLogger(HelloController.class)
@Slf4j//方式2
public class HelloController {// 注意类所在的包 org.apache.logging.log4j.Logger  方式1private Logger logger = LogManager.getLogger(HelloServlce.class);
​@GetMapping("/hello")public String hello() {logger.info("info hello");// {} 表示占位符,用于格式化参数logger.info("info {}", "hello world");logger.debug("debug info");logger.error("error info");
​return "logger";}
​@GetMapping("/hello2")public String hello2() {logger.info("info hello");// log 通过@Slf4j注解定义log.error("slf4j error");log.info("slf4j info");log.debug("slf4j debug");
​return "slf4j log";}
}
​

http://www.ppmy.cn/news/1533184.html

相关文章

VUE 开发——AJAX学习(一)

一、AJAX入门和axios使用 1.AJAX定义&#xff1a; 异步的javascript和XML&#xff0c;就是使用XMLHttp Request对象与服务器通信&#xff0c;浏览器和服务器进行数据交换的技术。 2.使用axios 引入axios.js&#xff1a;https://unpkg.com/axios/dist/axios.min.js使用axios函…

2024/9/30 英语每日一段

The British Academy has created three high-profile awards to sit alongside the trophies it hands out to adult television shows--going some way, it is hoped, to replace Bafta’s abandoned children’s TV awards event. “Children’s programme-making has been …

小米2025届软件开发工程师(C/C++/Java)(编程题AK)

选择题好像也是25来个 编程题 T1 题目描述 小明喜欢解决各种数学难题。一天&#xff0c;他遇到了一道有趣的题目:他需要帮助他的朋友们完成一个排序任务。小明得到两个长度为 n 的数组a[]和b[]。他可以在两个数组对应位置进行交换&#xff0c;即选定一个位置 i &#xff0c…

【Webpack】Hash 码

概述 在 Webpack 中&#xff0c;Hash 码主要用来缓存控制&#xff0c;确保每次修改文件后生成的文件名是唯一的&#xff0c;从而避免缓存问题。Webpack 在打包过程中&#xff0c;通过对文件内容进行哈希运算来生成 Hash 码&#xff0c;具体方式主要有三种&#xff1a;hash、ch…

[Day 78] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

為了幫助您完成第78天的文章"AI在保險業中的創新應用"&#xff0c;本文將從AI在保險業的主要應用場景開始&#xff0c;並提供多個代碼示例&#xff0c;每個代碼都會有詳細的解釋。文章將涵蓋人工智能技術如何提升保險業務的效率、風險管理、用戶體驗&#xff0c;並引…

Springboot3保存日志到数据库

保存日志到数据库 请求日志几乎是所有大型企业级项目的必要的模块&#xff0c;请求日志对于我们来说后期在项目运行上线一段时间用于排除异常、请求分流处理、限制流量等。请求日志一般都会记录请求参数、请求地址、请求状态&#xff08;Status Code&#xff09;、SessionId、…

代码随想录算法训练营第十四天|递归 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度

226.翻转二叉树 翻转一棵二叉树。 思路&#xff1a; 在这里需要注意的是&#xff0c;在递归的时候唯独中序遍历是不可用的&#xff0c;这是因为先对左子树进行了反转&#xff0c;又对自身进行了反转&#xff0c;对自身反转后原本的左子树变成了右子树&#xff0c;如果此时又轮…

Camera Raw:打开图像

在图像工作流程中&#xff0c;无论是 Raw 格式图像文件还是 JPEG、TIFF 文件&#xff0c;都可以先使用 Camera Raw 打开并调整后&#xff0c;再进入其它 Adobe 软件如 Photoshop 中进行进一步的编辑和处理。 一、打开 Raw 格式图像 1、通过 Adobe Bridge 打开 在 Adobe Bridge …