SpringBoot中使用Log4j2

2023-10-27

一、简介

  1. slf4j是日志接口,logbacklog4j2是其实现。
  2. log4j2的并发效率优于logback

二、SpringBoot中使用log4j2

  1. 由于SpringBoot中默认使用logback作为其日志框架,因此如果需要替换为log4j2,需要先将logback的依赖排除。
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
    <!-- 排除logback的依赖 --> 
    <exclusions> 
        <exclusion> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-logging</artifactId> 
        </exclusion> 
    </exclusions> 
</dependency> 
<!-- log4j2 --> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-log4j2</artifactId> 
</dependency>
  1. classpath下新建log4j2的配置文件,命名为log4j2-spring.xml,如需重命名,如log4j2.xml,需要在application.properties中指定配置文件的位置
logging.config=classpath:log4j2.xml
  1. 配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<!--
 status:指定log4j2框架本身打印日志的级别
 monitorInterval:每隔多少秒重新读取配置文件,可以不重启应用的情况下修改配置
 -->
<Configuration status="INFO" monitorInterval="30">
    <Properties>
        <!-- 配置日志文件输出目录 -->
        <Property name="APP_NAME">spring-log4j2</Property>
        <Property name="LOG_HOME">/var/log</Property>
        <!--
         %date 或 %d{yyyy-MM-dd HH:mm:ss.SSS}:表示输出到毫秒的时间
         %t 或 %thread:输出当前线程的名称
         %X:按MDC输出日志,使用示例:在日志打印前执行MDC.put("httpRequestId", requestId),打印之后执行MDC.remove("httpRequestId")
         %-5level:输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补空格
         %logger{80}:输出logger名称
         %msg:输出日志内容
         %n:换行
         -->
        <Property name="printPattern">%date [%thread] [%X{httpRequestId}] %-5level %logger{50} - %msg%n</Property>
        <Property name="outputPattern">%date [%thread] [%X{httpRequestId}] %-5level %logger{80} - %msg%n</Property>
    </Properties>

    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="ALL" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>${printPattern}</pattern>
                <charset>UTF-8</charset>
            </PatternLayout>
        </Console>

        <RollingFile name="infoLog" fileName="${LOG_HOME}/${APP_NAME}-info.log" filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/${APP_NAME}-info.%d{yyyy-MM-dd}.%i.log.zip" immediateFlush="true">
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>${outputPattern}</pattern>
                <charset>UTF-8</charset>
            </PatternLayout>
            <Policies>
                <!--
                interval:根据日期格式中最具体的时间单位来决定应该多久发生一次rollover,默认是1小时,此处表示1天生成一个文件
                modulate:表示是否调整时间间隔以使在时间间隔边界发生下一个rollover。
                例如:假设小时为具体的时间单元,当前时间为上午3点,时间间隔为4,第一次发送rollover是在上午4点,接下来是上午8点,接着是中午,接着是下午4点等发生。
                -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <!-- 一个日志文件的最大大小,当超过此大小时将发生rollover -->
                <SizeBasedTriggeringPolicy size="100MB"/>
            </Policies>
            <!--文件夹下最多的文件个数,如果不设置默认为7 -->
            <DefaultRolloverStrategy max="30" />
        </RollingFile>

        <RollingFile name="errorLog" fileName="${LOG_HOME}/${APP_NAME}-error.log" filePattern="${LOG_HOME}/${APP_NAME}-error.%d{yyyy-MM-dd}.%i.log.zip" immediateFlush="true">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>${outputPattern}</pattern>
                <charset>UTF-8</charset>
            </PatternLayout>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <SizeBasedTriggeringPolicy size="100MB"/>
                <DefaultRolloverStrategy max="30" />
            </Policies>
        </RollingFile>

    </Appenders>
    <Loggers>
        <Root level="INFO" >
            <appender-ref ref="console"/>
            <appender-ref ref="infoLog"/>
            <appender-ref ref="errorLog"/>
        </Root>
    </Loggers>
</Configuration>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot中使用Log4j2 的相关文章

  • Java中RandomAccessFile的并发

    我正在创建一个RandomAccessFile对象通过多个线程写入文件 在 SSD 上 每个线程都尝试在文件中的特定位置写入直接字节缓冲区 并且我确保线程写入的位置不会与另一个线程重叠 file getChannel write buffe
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • Spring boot 2.0.5.RELEASE和mongo 4.0连接问题

    我正在关注使用 MongoDB 访问数据教程春季网站 https spring io guides gs accessing data mongodb 我将 Mongo DB 服务器版本 4 安装为服务当我使用客户端连接到它时 它的身份验证
  • 如何在Spring Boot中初始化一次MongoClient并使用它的方法?

    您好 我正在尝试导出MongoClient在 Spring Boot 中成功连接后 我尝试在其他文件中使用它 这样我就不必每次需要在 MongoDB 数据库中进行更改时都调用该连接 连接非常简单 但目标是将应用程序连接到我的数据库一次 然后
  • 使用正则表达式验证输入字符串是否为 0-255 之间的数字

    我在将输入字符串与正则表达式匹配时遇到问题 我想验证输入数字在 0 255 之间并且长度最多应为 3 个字符 代码工作正常 但当我输入 000000 至任意长度时 显示 true 而不是 false 这是我的代码 String IP 000
  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • 从字符串生成密钥?

    我需要从字符串生成一个密钥 以便我始终可以从同一字符串创建相同的密钥 具体来说是一个Key对象 这样我就可以用它来创建Cipher进而创建SealedObject 这在 Java 中可行吗 我应该考虑什么类 方法组合才能做到这一点 对于 A
  • spring mvc 跟踪引用页面

    在基于注释的弹簧控制器中 如果用户正在url com first page并点击一个链接或提交一份表格指出url com second page 如何制作second page知道url of first page所以这样second pa
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • “___ 中的方法 ___() 是在无法访问的类或接口中定义的”编译错误

    我发现了一个奇怪的编译限制 我无法解释 并且我不明白这个限制的原因 示例1 考虑这些类 In package e1 public class C1 enum E1 A B C public E1 x In package e2 import
  • 如何列出hadoop hdfs中目录及其子目录中的所有文件

    我在 hdfs 中有一个文件夹 其中有两个子文件夹 每个子文件夹大约有 30 个子文件夹 最后 每个子文件夹都包含 xml 文件 我想列出所有 xml 文件 仅给出主文件夹的路径 在本地我可以这样做apache commons io 的 h
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr
  • Java 验证日期为 yyyyMMddHHmmss

    我想在java中验证给定的日期格式为yyyyMMddHHmmss 状况 应符合格式 yyyyMMddHHmmss 它应该验证当前日期 它应该验证与当前小时有 3 小时或 3 小时差异的小时数 如果满足所有三个条件 Java 方法应返回 tr
  • 如何使 JScrollPane 与嵌套 JPanel 一起正常工作?

    我正在使用 NetBeans 在 Java 中构建 Swing 应用程序 但我遇到布局问题 我的主框架包含一个JScrollPane其中包含一个JPanel called contentPanel其中又包含一个JPanel called l
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • 如何在 Log4j2 - JSON 布局中自定义或删除默认属性

    In Spring Boot 2我已配置的应用程序Log4j2 with JsonLayout像下面这样
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • 安装博途时一直提示重启电脑,如何操作?

    1 在安装博途时 一直要求重启电脑的提示 如下图所示 2 如果出现上图所以提示 需要进行如下操作 3 在电脑开始菜单里右击 选择运行 点击运行命令 会弹出如下图操作 4 删掉注册表的键值 如下图的位置 5 删掉上图所以键值后 再运行博途安装
  • 电子设计竞赛电源题(2)-检波与采样

    电赛中的电源题说好做也好做 说不好做也不好做 电源是一个危险的东西 硬件和软件稍有不慎可能就会炸板子炸芯片 在19年前的电赛电源题一般都是做开关电源逆变器之类的 但是这类题做的太多了 已经饱和了或者说现在的单纯的电源已经做的效率达到非常之高
  • UGUI中UI朝向某一个物体

    做一个上一剪头朝向下一箭头的效果 代码 Vector3 dir arrows i 1 transform position arrows i transform position dir z 0 dir Normalize arrows i
  • 如何解决技术难点

    1 可以从宏观方面处理 分解为小的demo 大处着眼 小处着手 2 分解为基本的技术 实现 3 切换一个电脑画图理解 画图有助于自己对整个流程分析 代码只是流程的实现 画图理解逻辑 保证自己有清晰的逻辑 清楚的思路和顺序 这点很重要 4 写
  • oracle hint之hint_index_ffs,index_join

    oracle hint index ffs index join index ffs hint 1 对表用快速索引全扫描进行访问 2 经测 仅count可以使用index ffs 而非count聚合函数好像不能使用index ffs SQL
  • 【IDEA】The IDE is running low on memory and this might affect performance. Please consider increasing

    今天在看Java源码 IDEA突然提示这个信息 The IDE is running low on memory and this might affect performance Please consider increasing av
  • Android 移动安全知识技术全解(加固技术、常规漏洞、Android 逆向......),移动安全问题不容忽视

    前言 您的设备是否处于遭受攻击 劫持或损害的风险中 毫无疑问 剑桥大学的研究人员发现 87 的 Android 智能手机有至少一个严重漏洞 Zimperium Labs 在早些时候发现 黑客只需通过一条简单的短信便能对 95 的 Andro
  • Let’s Make C++ Great Again——multiset与unordered_set

    文章目录 multiset 头文件 定义和插入元素 访问元素 遍历元素 删除元素 以下是一些常用的函数和用法 size empty 自定义排序方式 删除所有相同的元素 multiset和set有什么区别 元素唯一性 插入和删除 查找 uno
  • JVM垃圾回收与性能调优总结

    JVM垃圾回收与性能调优总结 JVM调优的几种策略 一 JVM内存模型及垃圾收集算法 1 根据Java虚拟机规范 JVM将内存划分为 New 年轻代 Tenured 年老代 永久代 Perm 其中New和Tenured属于堆内存 堆内存会从
  • 免费虚拟服务器注册,如何注册免费虚拟主机空间

    如何注册免费 目前能提供免费虚拟主机空间的服务商 非常少 即使有 也是各种限制 这里仅推荐几款比较熟知的品牌 OpenShift OpenShift空间是Red Hat的平台即服务的 但也存在着 PHP程序不兼容 国内访问速度慢 访问出现莫
  • 如何使用overleaf&LaTeX

    Introduction What is LaTeX LaTeX是一种基于 的排版系统 由美国计算机学家莱斯利 兰伯特 Leslie Lamport 在20世纪80年代初期开发 利用这种格式 即使使用者没有排版和程序设计的知识也可以充分发挥
  • Python: list列表的11个内置方法

    前言 在实际开发中 经常需要将一组 不只一个 数据存储起来 以便后边的代码使用 在VBA中有使用数组 可以把多个数据存储 到一起 通过数组下标可以访问数组中的每个元素 Python 中没有数组 但是加入了更加强大的列表 list 下面就对列
  • 从输入URL到浏览器显示页面到底经历了什么?

    文章目录 从输入URL到浏览器显示页面到底经历了什么 DNS解析 1 DNS解析过程 2 DNS优化 建立TCP连接 1 什么是TCP 2 TCP的连接建立 三次握手 3 为什么是三次握手 发送HTTP请求 1 请求行 2 HTTP缓存优化
  • Yii Framework 开发教程(29) Zii组件-Menu 示例

    介绍完Yii数据库接口外 从本篇开始介绍Zii组件 包括列表视图ListView 表格视图GridView 此外还包括一些基于JQuery的UI组件 如AutoComplete DataPicker Button Drag 和 Drop等
  • 用Java生成N个不重复的随机数,3种实例

    1 Random类和Set集合来完成 Java实现生成n个不重复的随机数可以使用Java中的Random类和Set集合来完成 具体代码如下 import java util HashSet import java util Random i
  • el-table 中嵌入el-input 输入框无法输入问题(已解决)

    在使用elment ui中的el table 中嵌入el input 会出现 input 无法输入的情况 最后找到了问题的根源 是有时候获取到了数据 但是视图并没有更新 修改前代码
  • STM32f103系列 USART2 USART3 串口2和串口3通信

    最近在做一个工程要用到多个串口同时通讯的 就参考了正点原子的串口通讯例程 发现例程是USART1 串口1的 后面我想改成USART2 串口2的 上网找了资料 要不是不靠谱 要不就是要积分下载 所以后面自己写了一个可用程序来和大家分享 废话不
  • 期货反向跟单犯法吗?

    本篇文章给大家为分析一下关于 期货反向跟单犯法吗 这个疑问 对于想从事或正在运作跟单交易的朋友们来说有必要看一下 做反单跟单不同于做一个黑平台 黑平台的利润是来源于客户的亏损 而做反单的利润来源是市场 和杀羊具有本质区别 不存在什么违法行为
  • 【Educoder作业】C++ 面向对象 - 类的继承与派生

    Educoder作业 C 面向对象 类的继承与派生 关于继承 更多的是关注它的意义 在代码量很少的时候用处不大 大不了再写一个 但是当完成一些工作量比较大的工程时 继承就会避免我们重复的写很多东西 T1 公有继承 学生信息类 关注一下如何继
  • SpringBoot中使用Log4j2

    一 简介 slf4j是日志接口 logback和log4j2是其实现 log4j2的并发效率优于logback 二 SpringBoot中使用log4j2 由于SpringBoot中默认使用logback作为其日志框架 因此如果需要替换为l