log4j2.xml 配置文件详解

2023-05-16

  一、log4j2介绍

  log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",“.json"或者”.jsn"。
配置文件的格式:log2j配置文件可以是xml格式的,也可以是json格式的。
配置文件的位置:log4j2默认会在classpath目录下寻找log4j2.xml、log4j.json、log4j.jsn等名称的文件。
系统选择配置文件的优先级(从先到后)如下:
  (1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.
  (2).classpath下的名为log4j2-test.xml的文件.
  (3).classpath下名为log4j2.json 或者log4j2.jsn的文件.
  (4).classpath下名为log4j2.xml的文件.
  我们一般默认使用log4j2.xml进行命名。

  二、配置文件节点解析

  (1).根节点Configuration有两个属性:status和monitorinterval,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger)。
  status用来指定log4j本身的打印日志的级别。
  monitorinterval用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s。
  (2).Appenders节点,常见的有三种子节点:Console、RollingFile、File。
Console节点用来定义输出到控制台的Appender。
  name:指定Appender的名字.
  target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT。
  PatternLayout:输出格式,不设置默认为:%m%n。
File节点用来定义输出到指定位置的文件的Appender。
  name:指定Appender的名字。
  fileName:指定输出日志的目的文件带全路径的文件名。
  PatternLayout:输出格式,不设置默认为:%m%n。
RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender。
  name:指定Appender的名字。
  fileName:指定输出日志的目的文件带全路径的文件名。
  PatternLayout:输出格式,不设置默认为:%m%n。
  filePattern:指定新建日志文件的名称格式。
  Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志。
  TimeBasedTriggeringPolicy:Policies子节点,基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am…而不是7am。
  SizeBasedTriggeringPolicy:Policies子节点,基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小。
  DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。
ThresholdFilter属性:onMatch表示匹配设定的日志级别后是DENY还是ACCEPT,onMismatch表示不匹配设定的日志级别是DENY还是ACCEPT还是NEUTRAL。
  (3).Loggers节点,常见的有两种:Root和Logger。
  Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
  level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
  Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
  level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
  name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点。
  AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
  (4).关于日志level.
  共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
  All:最低等级的,用于打开所有日志记录。
  Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
  Debug:指出细粒度信息事件对调试应用程序是非常有帮助的。
  Info:消息在粗粒度级别上突出强调应用程序的运行过程。
  Warn:输出警告及warn以下级别的日志。
  Error:输出错误信息日志。
  Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志。
  OFF:最高等级的,用于关闭所有日志记录。
  程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

配置参数解释
	%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
 	%t 输出当前线程名称
  	%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
  	%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
 	%msg 日志文本
  	%n 换行
  其他常用的占位符有:
  	%F 输出所在的类文件名,如Log4j2Test.java
  	%L 输出行号
  	%M 输出所在方法名
  	%l 输出语句所在的行数, 包括类名、方法名、文件名、行数

   三、需要的Maven依赖

	<dependency>  
        <groupId>org.apache.logging.log4j</groupId>  
        <artifactId>log4j-api</artifactId>  
        <version>2.5</version>  
    </dependency>  
    <dependency>  
        <groupId>org.apache.logging.log4j</groupId>  
        <artifactId>log4j-core</artifactId>  
        <version>2.5</version>  
    </dependency>  

   四、最简配置

<?xml version="1.0" encoding="UTF-8"?>
 <Configuration status="WARN">
   <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
     </Console>
   </Appenders>
   <Loggers>
     <Root level="error">
       <AppenderRef ref="Console"/>
     </Root>
   </Loggers>
 </Configuration>

   五、较全面的配置

<?xml version="1.0" encoding="UTF-8"?>
 <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
 <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
 <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
 <configuration status="WARN" monitorInterval="30">
     <!--先定义所有的appender-->
     <appenders>
     <!--这个输出控制台的配置-->
         <console name="Console" target="SYSTEM_OUT">
         <!--输出日志的格式-->
             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
         </console>
     <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
     <File name="log" fileName="log/test.log" append="false">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
     </File>
     <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
         <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
             <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        
             <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
             <Policies>
                 <TimeBasedTriggeringPolicy/>
                 <SizeBasedTriggeringPolicy size="100 MB"/>
             </Policies>
         </RollingFile>
         <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
             <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
             <Policies>
                 <TimeBasedTriggeringPolicy/>
                 <SizeBasedTriggeringPolicy size="100 MB"/>
             </Policies>
         <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
             <DefaultRolloverStrategy max="20"/>
         </RollingFile>
         <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
                      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
             <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
             <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
             <Policies>
                 <TimeBasedTriggeringPolicy/>
                 <SizeBasedTriggeringPolicy size="100 MB"/>
             </Policies>
         </RollingFile>
     </appenders>
     <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
     <loggers>
         <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
         <logger name="org.springframework" level="INFO"></logger>
         <logger name="org.mybatis" level="INFO"></logger>
         <root level="all">
             <appender-ref ref="Console"/>
             <appender-ref ref="RollingFileInfo"/>
             <appender-ref ref="RollingFileWarn"/>
             <appender-ref ref="RollingFileError"/>
         </root>
     </loggers>
 </configuration>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

log4j2.xml 配置文件详解 的相关文章

  • 从 OMElement 对象获取 InputStream/io.Reader

    我有一个OMElement对象 从中我想得到一个InputStream或读者对象 我想要的是流式传输xml来自OMElement我有 没有加载到内存中 我只能得到XMLStreamReader对此表示反对 但我找不到办法得到InputStr
  • C# XML 反序列化。将节点中的所有内部文本读取到字符串属性中

    我目前正在尝试修改我的类 以便我的模型上的文本属性包含某个节点的所有内部文本 text node 给我带来问题的 xml 示例是
  • XSLT:如何防止 XSLT 代码在输出 xml 中生成冗余空格

    使用我的 XSL 代码 每当我删除一个元素 它都会在输出 xml 中引入一个空白行空间 这会妨碍树形结构外观XML的 你能建议我 如何摆脱它 这是示例代码示例 XML 示例
  • SQL Server 2008 XPath

    我们尝试根据我们提供的值过滤一组 XML 我们的数据库的 XML 字段中有以下 XML 如果传递数字 5052095050830 我们需要在 XML 中找到这个特定节点 我们提供的号码可能存在任意多次 任何机构都可以提供一些 SQL 示例来
  • 在布局中添加空格

    我正在尝试在 android 中创建空行 这就是我一直在做的事情 android layout width fill parent android layout height wrap content android text n n 我想
  • 通过API更新Twitter背景

    我在通过 Twitter 的 API 更新背景时遇到了一些问题 target url http www google com logos 11th birthday gif ch curl init curl setopt ch CURLO
  • 将 XML 数据提取到 php [重复]

    这个问题在这里已经有答案了 我正在尝试从 XML 文件中提取数据 http freegeoip net xml google com http freegeoip net xml google com 您可以看到该文件的内容类似于
  • 如何对xml进行排序?

    我有一个 XML 文件 如下所示
  • xml 拉解析器资产 xml

    如何使用拉解析器解析资产文件夹中的本地 XML 文件 我无法让拉解析器工作 它总是抛出 io 异常 我想我无法获取文件的路径或连接到该文件 mixm 我正在尝试各种方法来从 资产 和 资源 加载本地文件 但要按要求回答您的问题 因为其他人似
  • 在 CollapsingToolbarLayout 中设置 minHeight 没有任何效果

    我目前使用 CollapsingToolbarLayout 遇到的主要问题是 无论我尝试什么 工具栏的 minHeight 属性都没有任何效果 我想要的结果是这样的 CollapsingToolbarLayout 具有一定的展开高度和一定的
  • 在 WSDL 中包含 XSD

    我正在编写一个 wsdl 文件来在未来 SoapUI 中部署模拟服务 但我在包含我的 xsd 文件时遇到问题 XSD File
  • 加载 highchart 时 Android 错误膨胀类

    我正在尝试加载highcharts via Dialog 下面是我的代码 Gradle implementation com highsoft highcharts highcharts 9 0 1 XML
  • 如何获取 cElementTree 中某个元素的所有文本子元素?

    我正在使用cElementTreePython 中的模块用于获取某个文本的子级XML树 使用text财产 但它似乎只适用于直接文本子项 见下文 python gt gt gt import xml etree cElementTree as
  • 如何使用 Webpack 加载器导入 XML,而不自动转换为 JSON

    Webpack 4 的 xml loader 自动将导入的 XML 文件转换为 JSON 通过什么方式可以导入XMLwithout转换为 JSON XML 数据将使用现有的 应用程序专用的 XML 解析器进行处理 明确地说 我绝对愿意not
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • 有人可以推荐一个免费的 xslt 工具吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • PHP 和 DOM 文档

    我有一个关于 DOMDocument 的使用和创建 XML 的问题 我有一个 PHP 程序 加载到 XML 文件中 处理XML的每个节点 行 将其发送到另一个进程 然后该进程返回一个 XML 元素 我获取节点的字符串表示形式 以便可以创建

随机推荐

  • 用protues构建一个简单的升压电路

    本人最近在拼命的学习模电知识 xff0c 可是书上讲的东西记得住却不是很能理解 xff0c 为了更好的学习 xff0c 于是用proteus来做简单的电路图进行 实验 根据升压电路相关知识 xff0c 要对输入的电压进行放大有很多的办法 x
  • STM32f103c8t6与iML7991的IIC通信

    一 iML7991 7991是应用在TFT LCD领域的P GAMMA芯片 xff0c 利用IIC对其内部的GAMMA值 xff08 共14个 xff09 进行设定 7991地址表参考图1 1 可以看到两个GAMMA值共用3个地址 xff0
  • 解决Win10丢失mfcoleui.dll文件

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 xff0c 如果是新手第一时间会认为是软件或游戏出错了 xff0c 其实并不是这样 xff0c 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 xff0c 这时你只需下载这个
  • stm32f10x配置USART串口

    1 GPIO口的配置 首先要注意的时钟的使能 xff0c 不仅要打开GPIO口的时钟 xff0c 同样的在使用复用和串口的时钟也需要打开 span class token function RCC APB2PeriphClockCmd sp
  • N维数组初始化

    二维数组初始化 设二维数组为arr row col span class token keyword int span span class token operator span span class token operator spa
  • 创建vitis平台及工程

  • VMwave17安装xubuntu系统(OVA文件)

    1 打开VM 2 点击Player 文件 gt 打开 3 选择系统的OVA文件 4 给系统命名和定义路径 5 正在导入 6 安装完成 打开系统 xff08 播放虚拟机 xff09
  • HCIE-CloudComputing学习笔记之一:FusionComuter-2020.12

    目录 FusionComuter 一 云计算基础 1 虚拟化 半虚拟化 完全虚拟化 硬件辅助虚拟化 2 FusionComputer虚拟化相关知识 2 1 主机内存复用 2 2 虚拟机启动策略 2 3 虚拟机NUMA结构自动调整 2 4 开
  • Windows 共享内存实现进程间通讯

    Windows 共享内存实现进程间通讯 Windows共享内存创建共享内存 96 CreateFileMapping 96 string 转 w char 创建一个 96 size 96 大小的命名共享内存对象 xff0c 名称为 96 f
  • Docker 容器(redis、mongodb、mysql等)

    Docker下载地址 https download docker com win stable Docker 20Desktop 20Installer exe 一 创建 启动 redis 容器 CMD docker run name re
  • Android Settings中Preference的理解以及使用

    Preference 是Android App 中重要的控件之一 xff0c Settings 模块大部分都是通过 Preference 实现 优点 xff1a Preference 可以自动显示我们上次设置的数据 xff0c Androi
  • ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your

    这是语法错误 我想导入数据库脚本在mysql新建的数据库里面 xff0c 但是语句错误了 可以看到红框内的sourse xff0c 其实应该是source才对
  • 简化的围棋棋子规则(C++实现)

    题目 xff1a 输入棋盘 xff1a 1 1 2 3 2 3 3 3 2 3 3 3 2 2 2 3 3 3 1 2 2 2 3 3 2 1 1 2 3 1 其中1代表空 xff0c 2代表白子 xff0c 3代表黑子 xff09 输出
  • Acrobat DC 常用快捷键

    参考 xff1a https helpx adobe com cn acrobat using keyboard shortcuts html 动作快捷键下一页向右键或 Ctrl 43 Page Down上一页向左键或 Ctrl 43 Pa
  • 用Python爬取淘宝网商品信息

    用Python爬取淘宝网商品信息 转载请注明出处 网购时经常会用到淘宝网 点我去淘宝但淘宝网上的商品琳琅满目 xff0c 于是我参照中国大学 MOOC的代码写了一个爬取淘宝网商品信息的程序 代码如下 xff1a span class tok
  • 在Ubuntu中,使用minicom抓串口log

    xff08 1 xff09 先插上串口线 xff0c 连上设备 xff08 2 xff09 确定连的是哪个串口 ls dev tty 如果是串口转USB xff0c 然后连到主机上 xff0c 则为 dev ttyUSB 如果是直接串口连到
  • 【问题解决】Ubuntu中双击文件夹没有反应

    我的情况是 xff0c 在Windows下安装的虚拟机 xff0c 虚拟机上跑的Ubuntu16 04 某天突然出现这个bug xff0c 而且开其他的Ubuntu也是这种情况 百度一下 xff0c 我就知道了 xff0c 是在Window
  • 在Chrome中加载未打包的扩展

    Load the extension Extensions that you download from the Chrome Web Store are packaged up as crx files which is great fo
  • 在VMware下创建ubuntu虚拟机,以及与win建立ssh远程连接,全网最全

    一 下载VMware Workstation 官方下载最新版本 xff0c 正常下载即可 二 下载Ubuntu ios镜像文件 下载地址 xff1a https ubuntu com download desktop 三 Ubuntu 配置
  • log4j2.xml 配置文件详解

    一 log4j2介绍 log4j 2 x版本不再支持像1 x中的 properties后缀的文件配置方式 xff0c 2 x版本配置文件后缀名只能为 34 xml 34 json 34 或者 jsn 34 配置文件的格式 xff1a log