Springboot使用log4j2日志框架

文章目录

    • 1.pom.xml引入依赖
    • 2.配置文件引入log4j2的配置文件
    • 3.导入log4j2配置文件
    • 4.通过@Slf4j注解来使用log.info()等
    • 最后

1.pom.xml引入依赖

提示:lombok用于@Slf4j注解

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <!--过滤系统自带日志-->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

2.配置文件引入log4j2的配置文件

提示:在配置文件yaml中引入

logging:
  config: classpath:log4j2-spring.xml

3.导入log4j2配置文件

提示:文件名为log4j2-spring.xml,放置在/src/main/resources文件夹下与yaml配置文件同路径,可直接使用下面的配置文件信息,或根据自己需求修改。

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出 -->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数 -->
<configuration status="INFO" monitorInterval="30">
	<!--<contextName>log4j2</contextName> -->
	<properties>
		<!--${sys:catalina.home}表示linux中环境变量中的tomcat根目录 用户主目录 -->
		<!--原来用logback时候在统一配置中心也配置一个logging.path=/opt/tomcat-log/${spring.application.name} 
			LOG_PATH是内置变量 -->
		<!--${sys:user.home} 用户主目录 -->
		<Property name="log_path">logs</Property>

		<!-- 保留日志天数 D H M S 分别对应天 小时 分钟 秒 -->
		<property name="KEEP_LOG_DAY">60D</property>
		<!-- 日志切割的最小单位 -->
		<property name="EVERY_FILE_SIZE">5M</property>
	</properties>
	<!--先定义所有的appender -->
	<appenders>
		<console name="Console" target="SYSTEM_OUT">
			<!--输出日志的格式 -->
			<PatternLayout 
				pattern="[%d][%t][%p][%c:%L] %m%n" />
			<ThresholdFilter level="info" onMatch="ACCEPT"
				onMismatch="DENY" />
		</console>
		<!--这个输出控制台的配置 -->
		<!--<console name="Console" target="SYSTEM_OUT" follow="false"> -->
		<!--&lt;!&ndash;输出日志的格式 &ndash;&gt; -->
		<!--<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] 
			- %msg%n" /> -->
		<!--</console> -->

		<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
		<RollingFile name="RollingFileInfo"
			fileName="${log_path}/info.log"
			filePattern="${log_path}/$${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="info" onMatch="ACCEPT"
				onMismatch="DENY" />
			<!--<Filters> -->
			<!--<ThresholdFilter level="INFO"/> -->
			<!--<ThresholdFilter level="WARN" onMatch="DENY" -->
			<!--onMismatch="NEUTRAL"/> -->
			<!--</Filters> -->
			<PatternLayout 
				pattern="[%d][%t][%p][%c:%L] %m%n" />
			<Policies>
				<!-- 归档每天的文件 -->
				<!--<TimeBasedTriggeringPolicy interval="1" modulate="true"/> -->
				<TimeBasedTriggeringPolicy />
				<!-- 限制单个文件大小 -->
				<SizeBasedTriggeringPolicy
					size="${EVERY_FILE_SIZE}" />
			</Policies>
			<!-- 限制每天文件个数 --> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了100 -->
			<DefaultRolloverStrategy max="256">
				<Delete basePath="${log_path}/" maxDepth="3">
					<IfFileName glob="*/*info*.log" />
					<IfLastModified age="${KEEP_LOG_DAY}" />
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>


		<RollingFile name="RollingFileWarn"
			fileName="${log_path}/warn.log"
			filePattern="${log_path}/$${date:yyyy-MM-dd}/warn-%d{yyyy-MM-dd}-%i.log">
			<ThresholdFilter level="warn" onMatch="ACCEPT"
				onMismatch="DENY" />
			<!--<PatternLayout charset="GBK" pattern="[%d{HH:mm:ss:SSS}] [%p] - %l 
				- %m%n" /> -->
			<PatternLayout 
				pattern="[%d][%t][%p][%c:%L] %m%n" />
			<Policies>
				<TimeBasedTriggeringPolicy />
				<SizeBasedTriggeringPolicy
					size="${EVERY_FILE_SIZE}" />
			</Policies>
			<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了100 -->
			<DefaultRolloverStrategy max="256">
				<Delete basePath="${log_path}/" maxDepth="3">
					<IfFileName glob="*/*warn*.log" />
					<IfLastModified age="${KEEP_LOG_DAY}" />
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>
		<RollingFile name="RollingFileError"
			fileName="${log_path}/error.log"
			filePattern="${log_path}/$${date:yyyy-MM-dd}/error-%d{yyyy-MM-dd}-%i.log">
			<ThresholdFilter level="error" onMatch="ACCEPT"
				onMismatch="DENY" />
			<!--<PatternLayout charset="GBK" pattern="[%d{HH:mm:ss:SSS}] [%p] - %l 
				- %m%n" /> -->
			<PatternLayout 
				pattern="[%d][%t][%p][%c:%L] %m%n" />
			<Policies>
				<TimeBasedTriggeringPolicy />
				<SizeBasedTriggeringPolicy
					size="1${EVERY_FILE_SIZE}" />
			</Policies>
			<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了100 -->
			<DefaultRolloverStrategy max="256">
				<Delete basePath="${log_path}/" maxDepth="3">
					<IfFileName glob="*/*error*.log" />
					<IfLastModified age="180D" />
				</Delete>
			</DefaultRolloverStrategy>
		</RollingFile>
	</appenders>
	<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
	<loggers>
		<!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
		<logger name="org.springframework" level="INFO"></logger>
		<logger name="org.mybatis" level="DEBUG"></logger>
		<!--<root level="all"> -->
		<root level="ALL">
			<appender-ref ref="Console" />
			<appender-ref ref="RollingFileInfo" />
			<appender-ref ref="RollingFileWarn" />
			<appender-ref ref="RollingFileError" />
		</root>
		<logger name="cn.timebusker.util" level="INFO">
			<appender-ref ref="RollingFileInfo" />
		</logger>
	</loggers>
</configuration>

4.通过@Slf4j注解来使用log.info()等

提示:添加@Slf4j注解,然后在下面直接使用log.info()等方法

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.LoginServcie;
import com.example.demo.utils.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;

@RestController
@Slf4j
public class LoginController {

    @PostMapping("/user/login")
    public ResponseResult login(@RequestBody User user) {
        log.info("111-登录成功!");
        return null;
    }
}

控制台打印结果
在这里插入图片描述
info.log文件中打印的结果
在这里插入图片描述

最后

到此为止,欢迎大家交流!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器人中的数值优化之牛顿共轭梯度法

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 本文ppt来自深蓝学院《机器人中的数值优化》 如何解决Hessian矩阵非正定的情况 求解线性系统需要很精确么 引入截断的机制&#xff0c;如果Hessia…

遥感技术应用于作物类型种植面积估算实例

1.农作物遥感分类 1.1 利用多时相环境星 CCD 数据作物分类识别实验 采用支持向量机分类器进行基于象素遥感影像分类方法。在分类过程中&#xff0c;分别对不同日期的单景环境星数据以及不同日期环境星数据的组合进行分类&#xff0c;以评价环境星在作物分类中的应用潜力&#x…

【C语言】分支与循环语句

什么是语句&#xff1f; C语句可分为以下五类&#xff1a; 表达式语句函数调用语句控制语句 &#xff08;本篇重点介绍&#xff09;复合语句空语句 控制语句用于控制程序的执行流程&#xff0c;以实现程序的各种结构方式。C语言支持三种结构&#xff1a; 顺序结构选择结构循…

MidJourney笔记(9)-daily_theme-docs-describe

/daily_theme 切换 #daily-theme 频道更新的通知。 但我发现在对话框那里,是没有这个命令的: 但官网是有介绍,不知道是不是版本问题还是这个命令已经无效。 但后来,我发现这个命令是要在Midjourney服务对话框那里才有,在我们后面添加的Mid

哈希桶的模拟实现【C++】

文章目录 哈希冲突解决闭散列 &#xff08;开放定址法&#xff09;开散列 &#xff08;链地址法、哈希桶&#xff09;开散列实现&#xff08;哈希桶&#xff09;哈希表的结构InsertFindErase 哈希冲突解决 闭散列 &#xff08;开放定址法&#xff09; 发生哈希冲突时&#xf…

MySQL数据库多版本并发控制(MVCC)

在数据库中&#xff0c;并发控制是确保多个事务能够同时执行&#xff0c;而不会导致数据不一致或冲突的关键机制。多版本并发控制(MVCC)是一种流行的并发控制方法&#xff0c;它可以允许多个事务同时读取同一数据项的不同版本&#xff0c;而不会相互阻塞。本文将讨论MVCC的原理…

【每日一题】LeetCode206.反转链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1示例2示例3提示 2. 思路3.代码 1. 题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例1 输入&#xff1a;head [1…

FreeRTOS任务调度

开启任务调度器 vTaskStartScheduler(); 无参数, 无返回值. 作用是用于启动任务调度器&#xff0c;任务调度器启动后&#xff0c; FreeRTOS 便会开始进行任务调度 . 如果允许了静态创建任务, 则创建空闲任务和创建定时器任务都会变为需要程序员手动实现创建. 1.创建空闲任务(…

成为一名成功的互联网产品经理需要掌握哪些技能?

在现代互联网产业中&#xff0c;产品经理扮演着至关重要的角色。作为产品经理&#xff0c;需要不断地学习和提高自己的技能&#xff0c;以便为用户提供更佳的产品体验。以下是成为一名成功的互联网产品经理所需要掌握的技能&#xff1a; 1.产品设计技能 产品设计是产品经理的…

Linux 线程概念

文章目录 前言线程的概念线程的操作操作的原理补充与说明 前言 ① 函数的具体说明被放在补充与说明部分 ② 只说些基础概念和函数使用 线程的概念 网络回答&#xff1a;Linux 线程是指在 Linux 操作系统中创建和管理的轻量级执行单元。线程是进程的一部分&#xff0c;与进程…

使用数组创建链表的解决方案

因为在创建链表时用到了这种方法&#xff0c;后面发现这种方法创建链表做删除操作时不是很好&#xff0c;就打算删除&#xff0c;但是觉得这种方法可能对部分读者有参考意义&#xff0c;就基于数组创建链表的方法单独发了一篇&#xff0c;完整的~链表五大基础操作的实现方法可参…

2022 年全国职业院校技能大赛高职组云计算正式赛卷第二场-容器云

2022 年全国职业院校技能大赛高职组云计算赛项试卷 云计算赛项第二场-容器云 目录 2022 年全国职业院校技能大赛高职组云计算赛项试卷 【赛程名称】云计算赛项第二场-容器云 【任务 1】容器云平台搭建[5 分] 【任务 2】容器云应用部署&#xff1a; Docker Compose 编排部署[7.0…

Python新手上路:“用Python和Pygame创造你的流星雨”

文章目录 一、前言二、下载安装过程1.官网下载安装包2.安装python过程第一步第二步第三步第四步第五步安装完成 3.简单测试Python3.1 检查 Python 版本号3.2 打开 Python 解释器3.3 输入你的第一个代码3.4 运行 Python 脚本 4.安装Pygame4.1 cmd命令安装Pygame4.2 pip升级4.3 安…

thinkcmf 文件包含 x1.6.0-x2.2.3 已亲自复现

thinkcmf 文件包含 x1.6.0-x2.2.3 CVE-2019-16278 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 ThinkCMF是一款基于PHPMYSQL开发的中文内容管理框架&#xff0c;底层采用ThinkPHP3.2.3构建。ThinkCMF提出灵活的应用机制&a…

k8s的二进制部署(二)网络

节点部署完成之后,节点的状态都是Notready&#xff0c;所以要部署k8s网络&#xff1a; k8s的网络类型&#xff1a; k8s中的通信模式&#xff1a; pod内部之间容器与容器之间的通信。 在同一个pod中的容器共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直…

设计模式(4)--对象行为(6)--备忘录

1. 意图 在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态。 这样以后可以将该对象恢复到原先保存的状态。 2. 三种角色 原发器(Originator)、备忘录(Memento)、负责人(Caretaker) 3. 优点 3.1 保持了封装边界。屏蔽了原发器的…

(13)Linux 进程的优先级、进程的切换以及环境变量等

前言&#xff1a;我们先讲解进程的优先级。然后讲解进程的切换&#xff0c;最后我们讲解环境变量&#xff0c;并且做一个 "让自己的可执行程序不带路径也能执行"的实践&#xff0c;讲解环境变量的到如何删除&#xff0c;最后再讲几个常见的环境变量。 一、进程优先级…

redis的搭建及应用(二)-redis的持久化策略

Redis的持久化策略 RDB RDB持久化是指在指定的时间间隔内将redis内存中的数据集快照写入磁盘&#xff0c;实现原理是redis服务在指定的时间间隔内先fork一个子进程&#xff0c;由子进程将数据集写入临时文件&#xff0c;写入成功后&#xff0c;再替换之前的文件&#xff0c;用二…

Spring对bean的管理

一.bean的实例化 1.spring通过反射调用类的无参构造方法 在pom.xml文件中导入坐标&#xff1a; <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.29<…

云手机引领社交平台运营新潮流

在网络高度发展的今天&#xff0c;社交平台已经成为企业宣传推广的关键渠道之一。传统的社交运营方式已经无法满足效率的要求&#xff0c;云手机因而开始引领社交平台运营的新潮流。本文将深入探讨云手机如何重新定义社交平台运营&#xff0c;为用户和企业带来更为便捷、智能的…