log4j2日志配置

2023-10-27

背景

  log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量、可配置的审计型日志、基于插件架构的各种灵活配置等。

官方配置文档:http://logging.apache.org/log4j/2.x/manual/configuration.html

1、所需jar

1)maven配置

复制代码

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

复制代码

网页的话还要加入如下的maven配置:

         <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <scope>runtime</scope>
        </dependency>    

2)使用jar

log4j-api-2.7.jar  
log4j-core-2.7.jar 

2、配置日志打印文件

  java项目寻找log4j2配置文件会依次读取classpath是否有下面这些文件:

  • log4j.configurationFile
  • log4j2-test.properties
  • log4j2-test.yaml 或者 log4j2-test.yml
  • log4j2-test.json 或者 log4j2-test.jsn
  • log4j2-test.xml
  • log4j2.properties
  • log4j2.json 或者 log4j2.jsn
  • log4j2.xml
  • DefaultConfiguration 

  我们在main/src/resource目录下添加log4j2.xml文件。文件内容如下:

复制代码

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <!-- 变量配置 -->
    <Properties>
        <Property name="log_path">${sys:catalina.home}/logs/zcrTest/</Property>
    </Properties>
 
    <!-- appender配置 -->
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
        </Console>
        <RollingFile name="DailyRollingFile" fileName="${log_path}/zcrTest.log"
            filePattern="${log_path}/zcrTest%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
            <TimeBasedTriggeringPolicy  interval="1"/>
       <SizeBasedTriggeringPolicy size="10 MB" /> 

        </RollingFile>
    </Appenders>
    <Loggers>
     <Logger name="mylog" level="trace" additivity="false">  
       <AppenderRef ref="DailyRollingFile" />  
     </Logger>  
     <!-- 配置要使用的appender -->
   <!--
        additivity开启的话,由于这个logger也是满足root的,所以会被打印两遍。
        不过root logger 的level是error,为什么Bar 里面的trace信息也被打印两遍呢
        -->
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="DailyRollingFile"/>
        </Root>
    </Loggers>
</Configuration>

复制代码

   上面的log4j2.xml中以Configuration为根节点,有一个status属性,这个属性表示log4j2本身的日志信息打印级别。如果把status改为TRACE再执行测试代码,可以看到控制台中打印了一些log4j加载插件、组装logger等调试信息。

  日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。对于Loggers中level的定义同样适用。

  上面配置了两种日志打印的方式,打印的等级是info。

  • Console:在命令行打印
  • RollingFile:打印到文件中

  Rolling的意思是当满足一定条件后,就重命名原日志文件用于备份,并从新生成一个新的日志文件。例如需求是每天生成一个日志文件,但是如果一天内的日志文件体积已经超过1G,就从新生成,两个条件满足一个即可。这在log4j 1.x原生功能中无法实现,在log4j2中就很简单了。

RollingRandomAccessFile的属性:

  • fileName  指定当前日志文件的位置和文件名称
  • filePattern  指定当发生Rolling时,文件的转移和重命名规则
  • SizeBasedTriggeringPolicy  指定当文件体积大于size指定的值时,触发Rolling
  • DefaultRolloverStrategy  指定最多保存的文件个数

  TimeBasedTriggeringPolicy  这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${log_path}/zcrTest%d{yyyy-MM-dd}.log,最小的时间粒度是dd,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每一天生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件。

3、调用

复制代码

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static Logger logger = LogManager.getLogger(APIV1Filter.class);

logger.info(..);
logger.error(..)

复制代码

4、如果是web项目还要加入如下的配置

复制代码

    <context-param>
        <param-name>log4jConfiguration</param-name>
        <param-value>"log4j2.xml所在目录"/log4j2.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
    </listener>

复制代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

log4j2日志配置 的相关文章

随机推荐

  • ISP算法学习之LSC(镜头阴影校正)

    LSC Lens Shading Correction 是ISP算法中的一个重要组成部分 用于校正镜头遮挡 lens shading 现象 镜头遮挡是由于镜头和图像传感器的光学特性导致的图像亮度不均匀的现象 通常 图像的中心部分较亮 而边缘
  • 破解软件的原理是什么(软件被破解公开)

    到底魔高一丈吗 还是路的高度是一丈 破解与破解之间就像矛盾和矛盾 从第一个软件上线之日起 这就成为了永恒的话题 即使是牛群也不可避免地破译了自己的软件 这不是技术问题 而是信息化时代的产物 软件基于二进制文件存储在系统中 运行时系统平台必须
  • rsync推拉复制同步脚本编写(详细)内附jenkins通过rsync脚本部署到tomcat

    本处基于saltstack的配置目录里分解rsync的tar包 倒序讲解 root master rsync ls rsyncd tar gz 后两个是推复制rsyncd tui master tar gz rsync tui slave
  • JDBC连接MySQL数据库

    文章目录 前言 一 怎么链接数据库 二 使用步骤 https img blog csdnimg cn 91945baa8c094d48890a557614f46fd7 png x oss process image watermark ty
  • stm32定时器详解

    目录 一 时基配置 定时器定时周期计算 二 捕获 比较通道配置 定时器捕获比较模式说明 三 中断优先级配置 四 开启中断与定时器相关函数 链接 一 时基配置 定时器时基配置主要是配置定时器周期 即分频系数和自动重载寄存器 比如现在我需要配置
  • 土壤湿度计检测模块 土壤湿度传感器 机器人智能小车

    https item taobao com item htm spm a1z09 2 0 0 67002e8dtYpcae id 522556171397 u rklgtpkf6bb 土壤湿度模块是一个简易的水分传感器可用于检测土壤的水分
  • 组件路由传参【vue3】

    大家对于vue3也已经不太陌生了 但是在路由传参中会遇到一点小问题 不知大家是否也遇到过 一起来看一下 首先是我们熟悉的vue路由传参 无非就是个router来进行的操作 首先就是导入vue router 这里一定要导入4版本的 不然vue
  • 文件和注册表的重定向解决方法

    注册表重定向解决办法 转载http www 2cto com os 201411 350858 html 32位程序如何访问64位的注册表 HKLM Software 在调用函数RegCreateKeyEx创建注册表项时 对其第六个参数RE
  • .NET Core 在程序集中集成Razor视图

    前言 有时候 我们在开发一个程序集供其他项目引用的时候 可能需要对外输出一些HTML的结构数据 还有一些情况我们可能开发的是一个中间件 这个中间件需要提供一些界面来对外展示数据或者是内部的一些程序的运行信息 这个时候我们也需要一个界面来做这
  • 电路原理图中的“NC“是什么意思?

    电路原理图中的 NC 是什么意思 1 在看电路原理图的时候 电路原理图上有 NC 我查了下是表示 此处不贴任何电子器件 我看了下实际的电路板确实没贴 那么不贴的话是不是相当于这个位置空出来了 断路 了 就是说芯片的这个引脚在电路中是 悬空状
  • 程序员必知的23种设计模式之享元模式

    文章目录 1 模式引出 展示网站项目需求 1 1 传统方案解决网站展现项目 1 2 传统方案解决网站展现项目 问题分析 2 享元模式基本介绍 2 1 享元模式的原理类图 2 2 内部状态和外部状态 可共享和不可共享 3 方案修改 4 享元模
  • flink维表join的几种方式(1)

    维表join的几种方式 一 将维表预加载到内存关联 实现方式 定义一个类实现RichFlatMapFunction在open 方法中读取全部数据加载到内存中 优缺点 因为存在内存中 所以仅支持小数据量维表 因为open方法中读取 所以维表变
  • 简单的两操作数计算器实现(基于Java网络编程)

    客户端代码实现 import java io import java net import java util Scanner 1 已知client端 提交计算表达式请求 如 3 4 2 在server服务器端完成运算并将结果返回给clie
  • Linux下报 No manual entry for 的解决方法

    报错展示 报错原因 没有安装 man pages 这个包 解决方法 yum y install man pages
  • 【界面】yolov8+pyqt5进行目标识别

    解决问题 通过pyqt5进行界面设计 调用yolov8模型对目标进行检测 文章目录 工具 准备工作 获取Onnx模型 核心代码 运行结果 源代码路径 工具 语言 python 主要库 pyqt5 检测模型 yolov8 准备工作 获取Onn
  • 机器学习:Self-supervised Learning for Speech and image

    review self supervised learning for text 1 Self supervised learning for speech 使用Speech版本的bert能比较好的作用于语音任务上 如果没有self sup
  • Windows无法安装到这个磁盘。选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘

    问题描述 Windows无法安装到这个磁盘 选中的磁盘具有MBR分区表 在EFI系统上 Windows只能安装到GPT磁盘 原因 说明本电脑的上一个系统的磁盘分区方式采用的MBR分区表 而我们U盘安装时 驱动方式是EFI系统 EFI与之对应
  • 力扣(LeetCode) 1.两数之和(java)

    题目 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 target 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能重复出现 你可以按
  • NDK_MODULE_PATH

    Cocos2d x 2 1的测试环境搭建 先下载COCOS2D的包解压后运行里面的create android project bat 这里面要先设置相应的路径 他会引导用户创建一个自定义项目 在编译这个项目前要先在ECLIPSE里设置ND
  • log4j2日志配置

    背景 log4j2相对于log4j 1 x有了脱胎换骨的变化 其官网宣称的优势有多线程下10几倍于log4j 1 x和logback的高吞吐量 可配置的审计型日志 基于插件架构的各种灵活配置等 官方配置文档 http logging apa