log4j2.xml配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info"><Properties><Property name="LOG_HOME">${sys:catalina.base}/dspelogs</Property><Property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{50} %L %M - %m%xEx%n" /></Properties><Appenders><Console name="Console" target="SYSTEM_OUT"><!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${PATTERN}" /></Console><RollingRandomAccessFile name="InfoLog" fileName="${LOG_HOME}/info.log" immediateFlush="true" filePattern="${LOG_HOME}/info.log.%d{yyyy-MM-dd}.gz"><PatternLayout pattern="${PATTERN}" /><Policies><TimeBasedTriggeringPolicy modulate="true" interval="1"/><!-- 每个文件的大小限制 --><SizeBasedTriggeringPolicy size="10 MB"/></Policies><DefaultRolloverStrategy max="20"><Delete basePath="${LOG_HOME}" maxDepth="2"><IfFileName glob="*.log.%d{yyyy-MM-dd}.gz" /><IfLastModified age="60d"/></Delete></DefaultRolloverStrategy></RollingRandomAccessFile><RollingRandomAccessFile name="ErrorLog" fileName="${LOG_HOME}/error.log" immediateFlush="true" filePattern="${LOG_HOME}/error.log.%d{yyyy-MM-dd}.gz"><PatternLayout pattern="${PATTERN}" /><Policies><TimeBasedTriggeringPolicy modulate="true" interval="1"/><!-- <CronTriggeringPolicy schedule="0 0 0 * * ?"/> --><!-- 每个文件的大小限制 --><SizeBasedTriggeringPolicy size="10 MB"/></Policies><DefaultRolloverStrategy max="20"><Delete basePath="${LOG_HOME}" maxDepth="2"><IfFileName glob="*.log.%d{yyyy-MM-dd}.gz" /><IfLastModified age="60d"/></Delete></DefaultRolloverStrategy></RollingRandomAccessFile></Appenders><Loggers><logger name="org.springframework" level="error" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="ErrorLog" /></logger><logger name="org.apache.zookeeper" level="error" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="ErrorLog" /></logger><logger name="org.apache.kafka" level="error" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="ErrorLog" /></logger><logger name="xx.xx.xx" level="info" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="InfoLog" /><AppenderRef ref="ErrorLog" /></logger><root level="info"><appender-ref ref="Console" /><appender-ref ref="InfoLog" /><appender-ref ref="ErrorLog" /></root></Loggers>
</configuration>

备注:部分配置说明

1、configuration 根节点,有status和monitorInterval等多个属性。
(1)status:用于控制log4j2日志框架本身的日志级别,它的值有 “trace”, “debug”, “info”, “warn”, “error”, “fatal”。
如果将stratus设置为较低的级别就会看到很多关于log4j2本身的日志,如加载log4j2配置文件的路径等信息。
(2)monitorInterval,表示每隔多少秒重新读取配置文件,可用于支持在不重启应用的情况下修改配置。
2、Properties 属性,可选配置。用来定义常量,以便在其他配置项中引用,例如定义日志的存放位置。
示例:
<Properties>
    <Property name="LOG_HOME">${sys:catalina.base}/var/logs</Property>
    <Property name="APP_LOG_HOME">${LOG_HOME}/applogs</Property>
</Properties>
3、Appenders是输出源,用于定义日志输出的地方。
log4j2支持的输出源有很多,有控制台ConsoleAppender、文件FileAppender、AsyncAppender、RandomAccessFileAppender、RollingFileAppender、RollingRandomAccessFile 等。
(1)ConsoleAppender
控制台输出源是将日志打印到控制台上,开发的时候一般都会配置,以便调试。
属性说明:
name:指定Appender的名字。
target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT。
PatternLayout:输出格式,不设置时默认为:%m%n。
示例:
<Console name="Console" target="SYSTEM_OUT">
    <!-- 控制台只输出info及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
    <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    <!-- PatternLayout代表着日志的输出格式,默认值为%m%n; -->
    <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
</Console>
(2)AsyncAppender
异步输出。AsyncAppender接受对其他Appender的引用,并使LogEvents在单独的Thread上写入它们。
默认情况下,AsyncAppender使用 java.util.concurrent.ArrayBlockingQueue ,它不需要任何外部库。多线程应用程序在使用此appender时需要注意:阻塞队列容易受到锁争用的影响,当很多线程同时记录时性能可能会变差。
(3)FileAppender
文件输出源,用于将日志写入到指定的文件,其底层是一个OutputStreamAppender,需要配置输入到哪个位置(例如:D:work/logs/applog.log)
name:指定Appender的名字。
fileName:指定输出日志的目的文件带全路径的文件名。
PatternLayout:输出格式,不设置默认为:%m%n。
RollingFileAppender
RollingFileAppender是一个OutputStreamAppender,它写入fileName参数中指定的File,并根据TriggeringPolicy和RolloverPolicy滚动文件。
(4)RandomAccessFileAppender
RandomAccessFileAppender类似于标准的 FileAppender,不同之处在于它总是被缓冲,并且在内部它使用 ByteBuffer + RandomAccessFile 而不是 BufferedOutputStream。
(5)RollingRandomAccessFileAppender
RollingRandomAccessFileAppender类似于标准的RollingFileAppender,不同之处在于它总是被缓冲,并且在内部它使用ByteBuffer + RandomAccessFile 而不是BufferedOutputStream。
RollingRandomAccessFileAppender写入fileName参数中指定的文件,并根据TriggeringPolicy和RolloverPolicy滚动文件。
(6)RollingRandomAccessFile: 
该输出源也是写入到文件,不过比File更加强大,可以指定当文件达到一定大小(如10MB)时,另起一个文件继续写入日志,而新文件的名字命名规则可以通过filePattern配置实现。可以避免一直往一个文件中写入,最终造成文件过大,难以打开或打开就卡死等问题。
RollingRandomAccessFile基本属性: 
    name:指定Appender名称
    fileName:指定当前日志文件的位置和文件名称
    filePattern:指定当发生Rolling时,文件的转移和重命名规则。
    immediateFlush:log4j2接收到日志事件时,是否立即将日志刷到磁盘。默认为true。为ture时每次写入后都会进行刷新,这将保证数据写入磁盘,但可能会影响性能。
    bufferSize 缓冲区大小,默认为262,144字节(256 * 1024)。
    Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志。
    SizeBasedTriggeringPolicy 指定基于文件大小的触发策略。当大于size指定的值时,触发Rolling
    TimeBasedTriggeringPolicy 指定时间触发策略。
    DefaultRolloverStrategy 指定最多保存的文件个数,回滚策略。
4、PatternLayout代表着日志的输出格式,默认值为%m%n。
控制台或文件输出源(Console、File、RollingRandomAccessFile)都必须包含一个PatternLayout节点,用于指定输出文件的格式(如 日志输出的时间、文件、方法、行数等格式)。
示例:pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5level %logger{0} - %m%n"
    %p 日志输出格式
    %d 输出日志日期格式,如%d{yyyy-MM-dd HH:mm:ss,SSS}输出2012-11-02 14:34:02,123
    %t 输出当前线程名称
    %-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补空格
    %logger或%c 输出logger名称
    %m 日志信息,即logger.info("message")
    %n 换行
    其他常用的占位符有:
    %C 输出Java类名 
    %F 输出所在的类文件名,如Log4j2Test.java
    %L 输出行号
    %M 输出所在方法名
    %l 输出语句所在的行数, 包括类名、方法名、文件名、行数
    hostName : 本地机器名 
    hostAddress : 本地ip地址
5、Filters决定日志事件能否被输出。
过滤条件有三个值:ACCEPT(接受),DENY(拒绝),NEUTRAL(中立)。
(1)ThresholdFilter 根据日志级别过滤。
示例1:输出warn级别以下的日志
<Filters>
    <!--如果是error级别拒绝,设置 onMismatch="NEUTRAL" 可以让日志经过后续的过滤器-->
    <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
    <!--如果是debug\info\warn级别的日志输出-->
    <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
示例2:只输出error级别以上的日志
<Filters>
    <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
(2)TimeFilter 根据时间过滤。时间过滤器可用于将过滤器限制为仅当天的某个部分。
示例:
<Filters>
    <!-- 只允许在每天的 8点~8点半 之间输出日志 -->
    <TimeFilter start="08:00:00" end="08:30:00" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
6、Policy和Strategy
Policy是用来控制日志文件何时(When)进行滚动的;Strategy是用来控制日志文件如何(How)进行滚动的。
注:如果配置的是RollingFile或RollingRandomAccessFile,则必须配置一个Policy。
Policy触发策略有:
(1)SizeBasedTriggeringPolicy  基于日志文件大小的触发策略。单位有:KB,MB,GB
示例:<SizeBasedTriggeringPolicy size="10 MB"/>
(2)CronTriggeringPolicy  基于Cron表达式的触发策略,很灵活。
示例:<CronTriggeringPolicy schedule="0/5 * * * * ?" />
(3)TimeBasedTriggeringPolicy  基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。
有两个参数:
interval,integer型,指定两次封存动作之间的时间间隔,默认值是1。这个配置需要和filePattern结合使用。
filePattern日期格式精确到哪一位,interval也精确到哪一个单位。注意filePattern中配置的文件重命名规则是%d{yyyy-MM-dd HH-mm-ss}-%i,最小的时间粒度是ss,即秒钟。
比如若filePattern=%d{yyyy-MM-dd HH},最小粒度为小时,若interval不设定,则每一个小时生成一个文件。
modulate,boolean型,说明是否对封存时间进行调制。若modulate=true, 则封存时间将以0点为边界进行偏移计算。
比如,modulate=true,interval=4hours, 那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00, 之后的封存时间依次为08:00,12:00,16:00
示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <RollingRandomAccessFile name="File" fileName="./log/app.log" filePattern="./log/app-%d{yyyy-MM-dd HH-mm}-%i.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5level %logger{0} - %msg%n" charset="UTF-8"/>
            <Policies>
                <!-- 每 5s 翻滚一次 -->
                <!--<CronTriggeringPolicy schedule="0/5 * * * * ?"/>-->
                <!--根据当前filePattern配置,日志文件每3分钟滚动一次-->
                <TimeBasedTriggeringPolicy interval="3"/>
                <!--日志文件大于10 MB滚动一次-->
                <SizeBasedTriggeringPolicy size="10 KB"/>
            </Policies>
            <!--保存日志文件个数-->
            <DefaultRolloverStrategy max="10"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

Strategy滚动策略有:
(1)DefaultRolloverStrategy  默认的滚动策略。常用参数是max,用于控制保存日志文件的最大个数。默认是7,大于此值会删除旧的日志文件。
示例:<DefaultRolloverStrategy max="10"/>
(2)DirectWriteRolloverStrategy  日志直接写入由文件模式表示的文件。
7、Loggers节点
常见的有两种:Root和Logger。Root节点用来指定项目的根日志,如果没有单独指定Logger,默认使用Root进行日志输出。
Root
每个配置都必须有一个根记录器Root。如果未配置,则将使用默认根LoggerConfig,其级别为ERROR且附加了Console appender。
根记录器和其他记录器之间的主要区别是:1.根记录器没有name属性。2.根记录器不支持additivity属性,因为它没有父级。
属性说明:
(1)level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF
(2)AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender。
Logger
Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。(使用Logger元素必须有一个name属性,root logger不用name元属性)
每个Logger可以使用TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF之一配置级别。如果未指定级别,则默认为ERROR。可以为additivity属性分配值true或false。如果省略该属性,则将使用默认值true。
Logger还可以配置一个或多个AppenderRef属性。引用的每个appender将与指定的Logger关联。如果在Logger上配置了多个appender,则在处理日志记录事件时会调用每个appender。
属性说明:
(1)name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点。一般是项目包名或者框架的包名,比如:com.jourwon,org.springframework
(2)level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF
(3)AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root。如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
(4) includeLocation : 展示位置信息比如哪个类,第几行,默认为true

log4j2配置说明相关推荐

  1. springmvc使用log4j2的配置,以及解决controller日志只有控制台打印日志,不生成本项目文件夹下

    文章目录 1.引包 2. log4j2.xml的配置 3.配置文件中的一些说明 springmvc使用log4j2的配置,以及只有控制台打印日志,不生成文件的解决方式,mvc使用log4j2时会出现在 ...

  2. Log4j2源码解读——删除过期文件

    之前一直以为Log4j2的过期文件删除功能是由配置文件中的 DefaultRolloverStrategy标签的max特性控制的. 既然是错误的认识,那肯定无法得到预期的结果.最近经过翻开源码和网上查 ...

  3. log4j2异步发送error日志邮件配置

    从高可用性方面考虑,大的平台通常都会配置错误日志发送邮件的功能,由于发送邮件比较慢,同步发邮件会影响用户体验,通常会配置成异步发日志邮件.网上只有零散的一些文章配置,没有一个完整的log4j2异步发邮 ...

  4. log4j2邮件发送配置

    一.配置前的准备 还要什么准备?当然要先给邮箱开通SMTP服务啦 二.添加依赖 <dependency><groupId>javax.activation</groupI ...

  5. Android中使用log4j2

    Log4j2 的配置.使用 最近公司让调研log4j2在Android中的使用,在网上查了很多资料,在这做个总结,一起学习,参考了许多文章,文末都有链接,感谢大佬们的文章 Log4j2 简介 log4 ...

  6. log4j2自定义appender插件源码、配置及采坑说明

    本篇为扩展appender标签,如果需要扩展filer.marker等其他的log4j2提供的扩展方式,可以查看相关的文档: 中文文档:https://www.docs4dev.com/docs/zh ...

  7. linux kvm虚拟化命令,Linux系统下kvm虚拟化(三)日常管理常用命令和配置说明

    根据我们之前创建和一些操作可以知道,KVM虚拟机的管理主要是通过virsh命令对环境下kvm虚拟机进行管理,下边这里整理一些常用的配置说明以及如何进行日常管理维护. 1,查看KVM虚拟机配置文件 KV ...

  8. Angular应用中tsconfig.json文件配置说明及配置全局路径映射

    tsconfig.json文件配置说明 1. tsconfig.json文件中的选项配置 2. 配置全局路径映射 1. tsconfig.json文件中的选项配置 TypeScript编译器配置文件的 ...

  9. 在java下使用log4j2记录日志

    1.定义: log4j2 指log4j 2.X及以上版本 2.安装 log4j-core-xx.jar log4j-api-xx.jar log4j-web-xx.jar(web项目的需要引用) 3. ...

最新文章

  1. QuikNode高性能以太坊节点服务【详细指南】
  2. 微型计算机广告牌实验报告,微机原理课程设计报告
  3. 蓝桥杯java第五届决赛第二题--六角幻方
  4. 原理分析_生化分析仪原理结构及参数对比
  5. java十六进制大小端转换_字节顺序
  6. 将std::string字符串格式的数字转换为int类型的数字
  7. HTTP最常见的请求头
  8. 韩顺平java面向对象高级编程学习笔记
  9. Kaspersky Security Center部署
  10. C语言中写保护的作用,C语言考试试题练习
  11. 我的第一个Python爬虫——谈心得
  12. 基于XSSFWorkbook 实现POI设置指定列为文本格式
  13. 洛谷刷题笔记 鸡尾酒疗法
  14. QIIME 2教程. 05粪菌移植分析练习Fecal microbiota transplant (FMT)(2020.11)
  15. HTML和CSS中的图像与背景图像
  16. 驱动VFD屏幕 / 真空荧光屏 (不完美)
  17. Swift - 描边文字效果
  18. python输出word内容_使用python-docx生成Word文档
  19. 解决 Unexpected token u in JSON at position 0
  20. CSS正方体背面不可见

热门文章

  1. LWIP应用开发|广播与组播
  2. 北京未来7天限行查询易语言代码
  3. 两个程序员在一起谈恋爱......?
  4. 数据结构与算法设计思路和考察点
  5. C语言操作符—左移右移操作符
  6. 无惧NB-IoT,LoRa阵营主攻手Semtech推出新工具
  7. linux 浏览器重定向,nginx 重定向浏览器url跳转和不跳转两种需求
  8. 新手站长如何做一个手机网站?
  9. EJB的本质,通俗易懂(转载)
  10. 03 原生Ajax写法