深入理解 SpringBoot 日志框架:从入门到高级应用——(五)Log4j2配置文件详解

这篇具有很好参考价值的文章主要介绍了深入理解 SpringBoot 日志框架:从入门到高级应用——(五)Log4j2配置文件详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Log4j2 官方文档:https://logging.apache.org/log4j/2.x/manual/index.html

Log4j2 是一个Java日志框架,用于记录应用程序在运行时的信息。它是 Log4j 的升级版本,提供了更快的处理速度,更快的日志记录和更丰富的日志记录功能,并支持异步日志记录,减少了对应用程序性能的影响。它可以非常灵活地配置和定制日志记录。是 Apache 软件基金会的开源项目,可以免费使用和修改。

以下是一些 Log4j2 的主要特点:

  1. 高性能:Log4j2 拥有优秀的性能,可以轻松处理大量的日志数据。

  2. 灵活性:Log4j2 可以根据应用程序的需求进行高度自定义,包括定制输出格式、选择不同的日志记录器等。

  3. 可扩展性:Log4j2 支持许多扩展插件,可以轻松地与其他框架集成。

  4. 多线程安全:Log4j2 的设计考虑到了多线程安全问题,可以在多线程环境下正常使用。

  5. 可配置性:Log4j2 支持多种配置文件格式,包括 XML、JSON 和 YAML 等。

总之,Log4j2 是一个功能强大、性能高效、灵活可扩展的日志框架,可以满足广泛的应用程序日志需求。

log4j2.xml 配置项

<Configuration>
  <Appenders>
    ...
  </Appenders>
  <Loggers>
    ...
  </Loggers>
  <Properties>
    ...
  </Properties>
</Configuration>

log4j2.xml 配置文件中包含以下配置项:

配置项 说明
Configuration 用于指定 Log4j2 的配置信息,包括日志级别、日志存储位置、日志格式等
Appenders 用于指定日志输出的目的地,包括文件、控制台、数据库等。每个 Appender 都需要指定一个 Layout(日志格式)
Loggers 用于指定每个日志记录器的日志级别和 Appender。可以通过指定 Logger 的名称、级别、以及添加的Appender,来控制日志的输出
Filters 用于指定针对特定Logger、Appender或LogEvent的过滤器,如正则表达式过滤、阈值过滤等
Properties 用于指定 Log4j2 的全局变量,可以在 Log4j2 配置文件中使用这些变量来配置一些参数
Script 用于指定 JavaScript 脚本,允许通过脚本来动态地生成日志信息
Custom Levels 用于定义自定义日志级别
Include 用于引入其他 XML 配置文件,允许将多个配置文件合并为一个配置

这些配置项可以结合使用,通过配置文件的方式灵活地控制 Log4j2 的行为。

Configuration 节点

Log4j2 的 XML 配置文件包含以下几个部分:

<Configuration>
  <Appenders>
    ...
  </Appenders>
  <Loggers>
    ...
  </Loggers>
  <Properties>
    ...
  </Properties>
</Configuration>

配置文件的根元素是<Configuration>,以下是一个 Log4j2.xml 的 Configuration 节点示例:

<Configuration status="warn" monitorInterval="30">
  <!-- ... -->
</Configuration>

其中,status属性指定日志的级别,monitorInterval 属性指定监控日志文件变化的时间间隔。其他常用的属性包括name、packages、shutdownHook、strict等。Log4j2.xml的 Configuration 属性包括:

属性 说明
status 指定日志记录器的状态,可以是“trace”、“debug”、“info”、“warn”或“error”
monitorInterval 配置文件监视间隔,单位是毫秒
verbose 是否在启动时显示详细的日志记录信息
name 指定日志配置文件的名称,可以为空
packages 指定需要自动配置的日志包
shutdownHook 指定是否使用JVM Shutdown Hook关闭日志记录器
strict 是否启用严格模式,如果启用则会强制要求所有配置项必须正确配置
schema 指定XML配置文件的模式
advertiser 指定广告器的类名,广告器用于将日志记录发送到远程或者本地的其他进程或应用

Properties 变量

log4j2.xml 文件中的 Properties 元素定义了一组键值对,可以在日志记录中使用。这些属性可以在配置文件中定义,也可以通过环境变量或其他方式在运行时指定。

以下是一个示例Properties元素的配置:

<Properties>
   <Property name="appName">myApp</Property>
   <Property name="logDir">/var/log/myApp</Property>
</Properties>

在上述示例中,定义了两个属性:appName 和 logDir。这些属性可以在日志记录模板中使用,如下所示:

<File name="File" fileName="${logDir}/myApp.log">
   <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p ${appName} - %m%n"/>
</File>

在这个例子中,通过使用${appName}${logDir}在日志记录模板中使用了定义的属性。这将会被解析为实际的值,如myApp/var/log/myApp

通过使用 Properties 元素,可以轻松地在整个配置文件中共享常量值,并且可以在运行时方便地更改这些值。

Appender 附加器

Log4j2 的 Appender 是用于将日志消息输出到指定目的地的组件。Log4j2 提供了多种 Appender,包括但不限于:

附加器类型 说明
ConsoleAppender 将日志消息输出到控制台
FileAppender 将日志消息输出到文件
RollingFileAppender 将日志消息输出到文件,并支持日志轮换
SocketAppender 将日志消息发送到远程服务器的Socket端口
JMSAppender 将日志消息发送到JMS队列或主题
SMTPAppender 将日志作为电子邮件发送
SyslogAppender 将日志输出到 Syslog 服务器
JDBCAppender 将日志写入数据库
KafkaAppender 将日志消息发送到Kafka主题

通过配置 Log4j2 的 Appender,我们可以根据不同的需求将日志消息输出到不同的目的地,方便后续的日志分析和管理。

ConsoleAppender

ConsoleAppender 是一种用于将日志输出到控制台的日志输出器。一个简单的样例如下:

<Appenders>
  <Console name="Console" target="SYSTEM_OUT">
    <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
  </Console>
</Appenders>

以下是一些常用的 ConsoleAppender 参数:

参数 说明
name 指定日志输出器的名称
target 指定输出目标,例如 System.out 或 System.err,默认为 System.out
follow 指定是否跟踪 stdout 或 stderr 的变化(仅适用于 Windows 平台)
encoding 指定字符编码,用于控制台输出
immediateFlush 指定是否立即将日志消息刷新到控制台,默认为 True

FileAppender

以下是一个log4j2.xml的FileAppender样例:

<Appenders>
  <File name="FileAppender" fileName="logs/myapp.log">
    <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
  </File>
</Appenders>

在这个配置中,我们定义了一个 FileAppender,并配置了输出文件为 logs/myapp.log,这意味着日志消息都将被写入 logs/myapp.log 文件中。我们使用了 PatternLayout 指定了输出日志格式。

Log4j2的FileAppender有以下参数:

参数 说明
name 指定Appender的名称
fileName 日志文件的保存路径和名称。可以使用相对路径和绝对路径,也可以使用变量(${})
append 是否在原有的日志文件中追加日志,默认为true
bufferedIo 是否开启缓存写入,默认为true
bufferSize 缓冲区的大小,默认为8192
immediateFlush 是否立即写入日志文件,默认为true
layout 指定日志文件的输出格式
filePermissions 指定日志文件的权限。可以是UNIX风格的数字权限(如0644)或者文件权限符号(如rwxr-xr–)
fileOwner 指定日志文件的拥有者
fileGroup 指定日志文件的所属组

RollingFileAppender

RollingFileAppender 是 Log4j2 中用于将日志输出到文件的一种 appender,它可以实现日志文件的滚动和压缩,以支持更长时间的日志存储。

<Appenders>
  <RollingFile name="RollingFileAppender" fileName="logs/myapp.log"
               filePattern="logs/myapp-%d{yyyy-MM-dd}-%i.log.gz">
    <PatternLayout pattern="%d %p %C{1.} [%t] %m%n"/>
    <Policies>
      <TimeBasedTriggeringPolicy />
      <SizeBasedTriggeringPolicy size="100 MB" />
    </Policies>
    <DefaultRolloverStrategy max="10"/>
  </RollingFile>
</Appenders>

在这个配置中,我们定义了一个RollingFileAppender 来处理日志。它的名称是“RollingFileAppender”,它的文件名是“logs/myapp.log”,并且它的文件模式是“logs/myapp-%d{yyyy-MM-dd}-%i.log.gz”。这将导致日志文件以日期和索引进行轮换,并使用gzip进行压缩。

在RollingFileAppender中,我们使用了PatternLayout来指定日志的格式。我们还添加了两个策略,一个是TimeBasedTriggeringPolicy,它基于时间触发轮换,另一个是 SizeBasedTriggeringPolicy,它基于文件大小触发轮换。我们还指定了一个 DefaultRolloverStrategy 来定义轮换的最大文件数。

RollingFileAppender 的参数如下:

参数 说明
name 指定Appender的名称
fileName 日志文件的保存路径和名称。可以使用相对路径和绝对路径,也可以使用变量(${})
filePattern 日志文件的文件名模式,支持日期格式化。例如:logs/myapp-%d{yyyy-MM-dd}-%i.log,表示按日期划分日志文件,并使用索引号区分不同的日志文件
append 是否在原有的日志文件中追加日志,默认为true
bufferedIo 是否开启缓存写入,默认为true
bufferSize 缓冲区的大小,默认为8192
immediateFlush 是否立即写入日志文件,默认为true
layout 指定日志文件的输出格式
policy 滚动策略,支持基于时间、文件大小等方式滚动,默认为 DefaultRolloverStrategy
strategy 日志消息的格式化方式,需指定一个 Layout 实例
filter 日志过滤器,需指定一个 Filter 实例
ignoreExceptions 是否忽略错误,当写入日志文件发生错误时是否抛出异常,默认为 true

SMTPAppender

SMTPAppender是log4j2中的一个appender,它允许将日志信息通过电子邮件发送。以下是一个示例log4j2.xml配置文件中SMTPAppender发送html格式的邮件:

<Appenders>
  <SMTP name="smtpAppender" subject="Log4j2 Test Mail" to="youremail@mail.com"
        from="fromemail@mail.com" smtpHost="smtp.gmail.com" smtpPort="587" smtpUsername="yourusername"
        smtpPassword="yourpassword" smtpProtocol="smtp" smtpDebug="true"
        htmlMsgLayout="${htmlMsgLayout}">
    <ThresholdFilter level="WARN"/>
  </SMTP>
</Appenders>
<Layouts>
  <HtmlLayout title="Log4j2 Test Mail">
    <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
  </HtmlLayout>
</Layouts>

在这个配置文件中,我们使用SMTPAppender来发送邮件。其中,我们设置了SMTP服务器的主机名、端口、用户名和密码等信息,并指定了发送的邮件内容为html格式。我们还定义了一个HtmlLayout来格式化邮件内容,它将普通的日志信息格式化为html形式。

在实际使用中,只需将to和from设置为你的邮箱地址,以及填写正确的smtpHost、smtpPort、smtpUsername和smtpPassword即可成功发送一封带有html格式的邮件。

以下是SMTPAppender的属性:

参数 说明
name Appender的名称
to 指定邮件接收者的电子邮件地址
cc 指定邮件抄送者的电子邮件地址
bcc 指定邮件密送者的电子邮件地址
from 指定邮件发送者的电子邮件地址
smtpHost SMTP服务器的主机名或IP地址
smtpPort SMTP服务器的端口号,默认为25
smtpUsername SMTP服务器的用户名
smtpPassword SMTP服务器的密码
smtpProtocol SMTP服务器的协议,默认为smtp
bufferSize 缓冲区大小,默认为512
subject 邮件主题,默认为Log4j Log Message
layout 指定日志信息的格式
filter 指定日志信息的过滤器
ignoreExceptions 是否忽略异常,默认为true。如果设置为false,则发生异常时邮件发送将会失败。

以上是 SMTPAppender 的属性,可以根据需要进行配置。

Loggers 日志记录器

log4j2.xml文件中的loggers元素定义了日志记录器的配置。它包含一个或多个logger元素,每个logger元素代表一个具体的日志记录器。每个logger元素可以指定日志级别、日志输出目标(appender)、日志过滤器(filter)等。

以下是一个示例loggers元素的配置:

<Loggers>
    <Logger name="com.example" level="info" additivity="false">
        <AppenderRef ref="CONSOLE" />
        <AppenderRef ref="FILE" />
    </Logger>
    <Root level="error">
        <AppenderRef ref="CONSOLE" />
        <AppenderRef ref="FILE" />
    </Root>
</Loggers>

在上面的示例中,有两个 logger 元素。第一个 logger 元素的 name 属性为“com.example”,表示这是一个名为“com.example”的日志记录器。它的 level 属性为“info”,指定日志级别为“info”级别。additivity 属性为“false”,表示在这个日志记录器中,日志不会被发送到它的父级日志记录器中。

第二个 logger 元素是 root 元素,表示所有未被明确指定日志记录器的日志都会被记录到这个 root 记录器中。它的 level 属性为“error”级别。

两个 logger 元素都引用了两个 appender(CONSOLE 和 FILE),这表示日志会被输出到控制台和文件中。

Filters 过滤器

log4j2.xml 中的 Filters 指的是过滤器,可以帮助我们过滤掉不需要的日志。Filters可以被配置在 Logger、Appender、Layout 等组件中。常用的 Filters 有以下几种:

过滤器 说明
ThresholdFilter 根据日志级别过滤,比如只输出ERROR级别及以上的日志
RegexFilter 根据正则表达式过滤,比如只输出满足特定正则表达式的日志
MapFilter 根据键值对过滤,比如只输出包含特定键值对的日志
StructuredDataFilter 根据结构化数据过滤,比如只输出带有指定结构化数据的日志

Filters 可以被链式组合起来,以实现更复杂的过滤逻辑。例如,可以使用 ThreadContextMapFilter 过滤指定键值对,然后再使用 ThresholdFilter 过滤指定级别的日志事件。

可以在 log4j2.xml 文件中通<Filters>标签中添加一个或多个Filters。例如:

<Appenders>
  <Console name="ConsoleAppender" target="SYSTEM_OUT">
    <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
    <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
  </Console>
</Appenders>

该配置文件将所有级别为WARN及以上的日志事件过滤掉,并将其输出到控制台。其中,onMatch 和 onMismatch 表示匹配和不匹配时的处理方式,可以取值为DENY(拒绝)、NEUTRAL(中立)和ACCEPT(接受)。

Layout 输出格式

Log4j2的Layout是用于指定日志消息输出格式的组件。它定义了日志事件的消息格式,以便它可以被写入到指定的输出目标中。

Log4j2提供了多种Layout实现,包括:

LayoutType 说明
PatternLayout 通过指定一个格式化字符串来输出日志消息。
HtmlLayout 用HTML标记格式化日志消息,使其在网页上更容易查看。
XmlLayout 以XML格式输出日志事件。
CsvLayout 以逗号分隔的格式输出日志消息,方便导入到Excel等表格软件中。
JsonLayout 以JSON格式输出日志事件。

用户可以根据需要选择合适的Layout实现,并根据自己的需求进行配置和定制化。例如,可以通过设置Layout的属性来控制时间和日期格式、输出日志级别等信息。

Log4j2-spring.xml 样例

下面是一个示例的 log4j2.xml 配置文件,其中包含了按大小滚动的设置,以及控制日志输出的配置选项:文章来源地址https://www.toymoban.com/news/detail-754841.html

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- Size-based rolling policy -->
        <RollingFile name="SizeBasedRollingFileAppender" fileName="logs/app.log" filePattern="logs/app-%d{yyyy-MM-dd}-%i.log" >
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>%d %p %c{1.} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>

        <!-- Console appender -->
        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>%d %p %c{1.} [%t] %m%n</pattern>
            </PatternLayout>
        </Console>
        
    </Appenders>
    <Loggers>
        <!-- Root logger -->
        <Root level="INFO">
            <AppenderRef ref="SizeBasedRollingFileAppender" />
            <AppenderRef ref="ConsoleAppender" />
        </Root>
    </Loggers>
</Configuration>

到了这里,关于深入理解 SpringBoot 日志框架:从入门到高级应用——(五)Log4j2配置文件详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • “深入理解Spring框架的核心原理与应用“

    标题:深入理解Spring框架的核心原理与应用 摘要:本文旨在深入探讨Spring框架的核心原理与应用。我们将介绍Spring框架的主要特点、IOC容器的工作原理、AOP的实现方式以及Spring MVC的应用等内容,并通过示例代码来演示Spring框架的使用。 Spring框架是一款非常流行的Java开发框架

    2024年02月16日
    浏览(42)
  • “深入理解SpringBoot:从入门到精通的几个关键要点“

    标题:深入理解Spring Boot:从入门到精通 摘要:本文将深入探讨Spring Boot的关键要点,帮助读者从入门到精通。我们将从Spring Boot的基本概念开始,介绍自动配置、起步依赖、注解驱动开发等特性,并通过示例代码演示如何使用Spring Boot构建一个简单的Web应用程序。 正文: S

    2024年02月14日
    浏览(36)
  • SpringBoot篇——SpringBoot微服务理解、SpringBoot和SSM框架区别等技术点,带你入门SpringBoot,一篇搞定!

    一、什么是为微服务 微服务是一种 架构风格 ,打破了all in one的架构方式,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合。 可以通过http的方式进行互通,服务可以独立部署和扩展,每个服务都提供一个坚实的模块边界,甚至不同的服务可以用

    2024年02月04日
    浏览(35)
  • 深入理解Nginx日志级别

    Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛用于提供网站和应用服务。它的强大功能之一是灵活的日志记录能力,允许管理员根据需要配置不同的日志级别。正确理解和使用这些日志级别对于监控、调试和保障你的服务稳定运行至关重要。本文旨在深入介绍 Nginx 支持的

    2024年03月13日
    浏览(43)
  • 深入理解Matplotlib:实现高级数据可视化

    Matplotlib 是一款极其强大的 Python 数据可视化库。尽管其使用起来可能稍显复杂,但无疑,Matplotlib 是创建高质量图形的关键工具之一。在上一篇文章中,我们介绍了 Matplotlib 的基础知识,包括创建和自定义基础图形等。而在这篇文章中,我们将深入讨论 Matplotlib 的一些高级特

    2024年02月16日
    浏览(36)
  • 深入理解高级加密标准(Advanced Encryption Standard)

    title: 深入理解高级加密标准(Advanced Encryption Standard) date: 2024/4/23 20:04:36 updated: 2024/4/23 20:04:36 tags: AES概述 加密原理 优势特点 算法详解 安全性 应用实践 案例分析 AES的历史和背景 历史:  高级加密标准(Advanced Encryption Standard,AES)是一种对称密钥加密标准,由美国国(A

    2024年04月24日
    浏览(33)
  • 深入理解Python中的日志记录(Logging)

    🚀  个人主页 :xmp65535 🚀  专栏 :python技术专栏 目录 一、Python Logging 模块概述 二、相关组件 Logger Handler Formatter Filter LogRecord Level 三、基本配置 Formatters格式: 四、记录日志 五、日志记录者(Loggers) logging.getLogger(name=None) 六、处理器(Handlers) logging.Handler() RotatingFileHand

    2024年04月23日
    浏览(35)
  • 深入理解Spring EL表达式的高级功能

    欢迎来到我的博客,代码的世界里,每一行都是一个故事 EL表达式不仅仅局限于基础用法,它还提供了丰富的高级功能。在这篇博客中,我们将揭开这些功能的神秘面纱,让你成为EL表达式的真正大师。 在EL(Expression Language)表达式中,可以使用各种操作符和语法来操作集合

    2024年01月25日
    浏览(45)
  • Linux 深入理解Linux文件系统与日志分析

    文件数据 包含 元信息(即不包含文件名的文件属性)    和    实际数据 文件元信息存储在 inode(索引节点)里, 文件实际数据存储在 block(块)里; 文件名存储在目录块里 stat  文件名   stat  文件名      ls -i 文件名   df -i Linux系统不使用 文件名 识别文件,而 使用 inode号 来识

    2024年04月25日
    浏览(38)
  • 【Java-14】3万字深入理解HashMap集合(高级)

    ​ HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。 ​ JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包