Log4j2 配置

news/2025/2/12 12:10:36/文章来源:https://www.cnblogs.com/aibi1/p/18711325

目录
  • 配置思路
  • 示例配置文件(log4j2.xml
  • 配置解释

日志配置需求
*INFO日志和ERROR日志分开定义
*有些包是INFO模式,有些是DEBUG模式
*默认是WARN模式
*可动态生效日志配置

配置思路

  1. 定义 Appenders:分别创建用于输出 INFO 日志、ERROR 日志和控制台日志的 Appender。
  2. 配置 Loggers:设置根 Logger 的默认日志级别为 WARN,然后为特定的包配置不同的日志级别。

示例配置文件(log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><!-- 定义属性,用于指定日志文件路径 --><Properties><Property name="logPath">logs</Property></Properties><!-- 定义 Appenders --><Appenders><!-- 控制台输出 --><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/></Console><!-- INFO 日志文件输出 --><RollingFile name="InfoFile" fileName="${logPath}/info.log"filePattern="${logPath}/info-%d{yyyy-MM-dd}.log.gz"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/><Filters><!-- 只允许 INFO 级别日志通过 --><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Filters><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="10 MB"/></Policies><DefaultRolloverStrategy max="10"/></RollingFile><!-- ERROR 日志文件输出 --><RollingFile name="ErrorFile" fileName="${logPath}/error.log"filePattern="${logPath}/error-%d{yyyy-MM-dd}.log.gz"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/><Filters><!-- 只允许 ERROR 及以上级别日志通过 --><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/></Filters><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="10 MB"/></Policies><DefaultRolloverStrategy max="10"/></RollingFile></Appenders><!-- 定义 Loggers --><Loggers><!-- 根 Logger,默认级别为 WARN --><Root level="WARN"><AppenderRef ref="Console"/><AppenderRef ref="InfoFile"/><AppenderRef ref="ErrorFile"/></Root><!-- 特定包使用 INFO 模式 --><Logger name="com.somepackage.info" level="INFO" additivity="false"><AppenderRef ref="Console"/><AppenderRef ref="InfoFile"/><AppenderRef ref="ErrorFile"/></Logger><!-- 特定包使用 DEBUG 模式 --><Logger name="com.somepackage.debug" level="DEBUG" additivity="false"><AppenderRef ref="Console"/><AppenderRef ref="InfoFile"/><AppenderRef ref="ErrorFile"/></Logger></Loggers>
</Configuration>

配置解释

  1. monitorInterval="30":该属性设置了 Log4j2 检查配置文件是否有更改的时间间隔(单位为秒),这里设置为 30 秒,即每 30 秒检查一次配置文件,如果有修改,会自动重新加载配置,实现动态生效。

  2. Properties:定义了一个属性 logPath,用于指定日志文件的存储路径。

  3. Appenders

    • Console:将日志输出到控制台。
    • InfoFile:将 INFO 级别的日志输出到文件,并按时间和文件大小进行滚动。通过 ThresholdFilter 只允许 INFO 级别的日志通过。
    • ErrorFile:将 ERROR 及以上级别的日志输出到文件,并按时间和文件大小进行滚动。通过 ThresholdFilter 只允许 ERROR 及以上级别的日志通过。
  4. Loggers

    • Root:根 Logger,默认日志级别为 WARN,关联了控制台、INFO 日志文件和 ERROR 日志文件。
    • com.somepackage.info:特定包的 Logger,日志级别为 INFO,不将日志传递给父 Logger(additivity="false"),关联了控制台、INFO 日志文件和 ERROR 日志文件。
    • com.somepackage.debug:特定包的 Logger,日志级别为 DEBUG,不将日志传递给父 Logger(additivity="false"),关联了控制台、INFO 日志文件和 ERROR 日志文件。
additivity="true"(默认值):当 additivity 属性设置为 true 或者不指定该属性时,当前 Logger 记录的日志除了会按照自身配置的 Appender 进行输出外,还会将日志传递给其父 Logger 继续处理。父 Logger 会根据自身的配置决定是否对这些日志进行输出。
additivity="false":当 additivity 属性设置为 false 时,当前 Logger 记录的日志只会按照自身配置的 Appender 进行输出,不会再传递给其父 Logger。

将上述配置文件放在类路径下(如 src/main/resources 目录),Log4j2 会自动加载并使用该配置。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团面试:手机扫描PC二维码登录,底层原理和完整流程是什么?

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

docker官网镜像无法下载问题解决

亲测可用,这个方法是由技术爬爬虾大佬提供,简单地说就是通过github上的docker_image_pusher项目,将国外docker镜像转存到阿里云私人仓库。 此方法需要你有一个github账号,有一个阿里云账号。注册方法这里就不赘述了。 1.1. 获取阿里云相关参数 登录阿里云容器镜像服务。地…

Uptime-kuba安装与使用

Github https://github.com/louislam/uptime-kuma环境查看 系统环境# cat /etc/redhat-release Rocky Linux release 9.3 (Blue Onyx) # uname -a Linux Rocky9Uptimekume003077 5.14.0-362.18.1.el9_3.0.1.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Feb 11 13:49:23 UTC 2024 x86_6…

一文读懂本地部署DeepSeek-R1,如何选择

一文读懂本地部署DeepSeek-R1,如何选择! 想在本地服务器部署DeepSeek-R1?那可得先搞清楚不同版本的硬件需求。DeepSeek-R1是个超厉害的语言模型,有好几个版本,每个版本对计算资源和硬件的要求都不一样。这篇文章能帮你了解各版本的参数、所需硬件,以及怎么根据自身需求选…

LLaMa-Factory 本地微调 Deepseek R1 1.5B 大模型

LLaMA Factory 是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过 Web UI 界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架之一。项目提供了多个高层次抽象的调用接口,包含多阶段训练,推理测试,benchmark评测,API Server等,使开…

一文读懂本地部署DeepSeek,如何选择

一文读懂本地部署DeepSeek,如何选择! 想在本地服务器部署DeepSeek-R1?那可得先搞清楚不同版本的硬件需求。DeepSeek-R1是个超厉害的语言模型,有好几个版本,每个版本对计算资源和硬件的要求都不一样。这篇文章能帮你了解各版本的参数、所需硬件,以及怎么根据自身需求选合适…

在线客服的独立产品之路:如何将复杂的 .NET 系统打包到 Docker 镜像,使之能一键上线

我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也积累了不少如何开发运营一款独立产品的经验。在这篇文章中,我主要讲 Docker 打包发…

raylib U1S07 - 拖动功能的实现

本来想做一个文字逃脱游戏的demo的。但是写起来之后发现——是真的不好写,要实现的功能太多了。要是在一节课或者一篇文章里把功能实现完,我吃不消学起来也难受,索性就拆开实现了。 这一篇先实现一个拖动的效果。看图:实现的功能:一个小球,可以在鼠标按下的时候跟着鼠标走…

002 Vue开发前的准备

1、安装Vue工具 Vue CLIhttp://vuejs.org 官网http://cn.vuejs.org 中文版官网     cli.vuejs.org Vue3最新版网址       Vue CLI Vue.js开发的标准工具,Vue CLI是一个基于Vue.进行快速开发的完整体系npm install -g @vue/cli 安装之后,你就可以在命令行中…

DeepSeek 是什么?

大家好,我是 R 哥。 最近,AI 界又掀起了一股新的浪潮,尤其是在国内市场,春节期间甚至被 DeepSeek 刷屏了,大家都在讨论 DeepSeek,好不热闹。 那么,DeepSeek 究竟是什么?它有什么厉害的地方? 啥?你还不知道使用 DeepSeek?清华大学出的《DeepSeek 从入门到精通》使用手…

前端如何计算js代码执行时长

前端代码调试、优化的时候,需要知道某段代码所消耗的时长,有好几种方法,这里介绍最简单,最常用的一种 console.time() 和 console.timeEnd() console.time()– 使用输入参数的名称启动计时器。在给定页面上最多可以同时运行 10,000 个计时器。 console.timeEnd()– 停止指定…

ABB IRB4400弧焊机械手伺服电机过载维修

在现代工业生产中,ABB IRB4400弧焊机械手发挥着重要的作用。然而,电机过载是可能出现的故障之一,这不仅影响生产效率,还可能对设备造成进一步损坏。当ABB IRB4400弧焊机械手的电机出现过载时,可能会有一些明显的现象。例如,电机可能会发出异常的噪音,运行速度不稳定或者…