0


深入理解 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 节点示例:

<Configurationstatus="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><Propertyname="appName">myApp</Property><Propertyname="logDir">/var/log/myApp</Property></Properties>

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

<Filename="File"fileName="${logDir}/myApp.log"><PatternLayoutpattern="%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><Consolename="Console"target="SYSTEM_OUT"><PatternLayoutpattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders>

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

FileAppender

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

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

在这个配置中,我们定义了一个 FileAppender,并配置了输出文件为

logs/myapp.log

,这意味着日志消息都将被写入

logs/myapp.log

文件中。我们使用了 PatternLayout 指定了输出日志格式。

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

RollingFileAppender

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

<Appenders><RollingFilename="RollingFileAppender"fileName="logs/myapp.log"filePattern="logs/myapp-%d{yyyy-MM-dd}-%i.log.gz"><PatternLayoutpattern="%d %p %C{1.} [%t] %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicysize="100 MB"/></Policies><DefaultRolloverStrategymax="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是否在原有的日志文件中追加日志,默认为truebufferedIo是否开启缓存写入,默认为truebufferSize缓冲区的大小,默认为8192immediateFlush是否立即写入日志文件,默认为truelayout指定日志文件的输出格式policy滚动策略,支持基于时间、文件大小等方式滚动,默认为 DefaultRolloverStrategystrategy日志消息的格式化方式,需指定一个 Layout 实例filter日志过滤器,需指定一个 Filter 实例ignoreExceptions是否忽略错误,当写入日志文件发生错误时是否抛出异常,默认为 true

SMTPAppender

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

<Appenders><SMTPname="smtpAppender"subject="Log4j2 Test Mail"to="[email protected]"from="[email protected]"smtpHost="smtp.gmail.com"smtpPort="587"smtpUsername="yourusername"smtpPassword="yourpassword"smtpProtocol="smtp"smtpDebug="true"htmlMsgLayout="${htmlMsgLayout}"><ThresholdFilterlevel="WARN"/></SMTP></Appenders><Layouts><HtmlLayouttitle="Log4j2 Test Mail"><PatternLayoutpattern="%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的属性:
参数说明nameAppender的名称to指定邮件接收者的电子邮件地址cc指定邮件抄送者的电子邮件地址bcc指定邮件密送者的电子邮件地址from指定邮件发送者的电子邮件地址smtpHostSMTP服务器的主机名或IP地址smtpPortSMTP服务器的端口号,默认为25smtpUsernameSMTP服务器的用户名smtpPasswordSMTP服务器的密码smtpProtocolSMTP服务器的协议,默认为smtpbufferSize缓冲区大小,默认为512subject邮件主题,默认为Log4j Log Messagelayout指定日志信息的格式filter指定日志信息的过滤器ignoreExceptions是否忽略异常,默认为true。如果设置为false,则发生异常时邮件发送将会失败。
以上是 SMTPAppender 的属性,可以根据需要进行配置。

Loggers 日志记录器

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

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

<Loggers><Loggername="com.example"level="info"additivity="false"><AppenderRefref="CONSOLE"/><AppenderRefref="FILE"/></Logger><Rootlevel="error"><AppenderRefref="CONSOLE"/><AppenderRefref="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><Consolename="ConsoleAppender"target="SYSTEM_OUT"><ThresholdFilterlevel="WARN"onMatch="DENY"onMismatch="NEUTRAL"/><PatternLayoutpattern="%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 配置文件,其中包含了按大小滚动的设置,以及控制日志输出的配置选项:

<?xml version="1.0" encoding="UTF-8"?><Configurationstatus="WARN"><Appenders><!-- Size-based rolling policy --><RollingFilename="SizeBasedRollingFileAppender"fileName="logs/app.log"filePattern="logs/app-%d{yyyy-MM-dd}-%i.log"><ThresholdFilterlevel="INFO"onMatch="ACCEPT"onMismatch="DENY"/><PatternLayout><pattern>%d %p %c{1.} [%t] %m%n</pattern></PatternLayout><Policies><SizeBasedTriggeringPolicysize="10 MB"/></Policies><DefaultRolloverStrategymax="10"/></RollingFile><!-- Console appender --><Consolename="ConsoleAppender"target="SYSTEM_OUT"><PatternLayout><pattern>%d %p %c{1.} [%t] %m%n</pattern></PatternLayout></Console></Appenders><Loggers><!-- Root logger --><Rootlevel="INFO"><AppenderRefref="SizeBasedRollingFileAppender"/><AppenderRefref="ConsoleAppender"/></Root></Loggers></Configuration>

本文转载自: https://blog.csdn.net/qq_20185737/article/details/131252893
版权归原作者 I'm Jie 所有, 如有侵权,请联系我们删除。

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

还没有评论