Log4j2 设置日志级别

Log4j2 setting log levels

我在 spring 应用程序中使用 log4j2 作为我的日志记录实用程序。我想将特定 libraries/packages 的日志级别设置为与根目录不同的级别。例如,我希望 org.springframework 为 INFO,com.google 为 WARN。我在 log4j2.properties:

中找到了这个
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
logger.rolling.name = com.test.app
logger.rolling.level = ALL
logger.rolling.appenderRef.rolling.ref = RollingFile

rootLogger.level = info

不明白logger.rolling是什么意思?我一直在 log4j2 文档中找到它,但没有解释那是什么或 ALL 是什么意思。

如何为特定包添加日志级别,这个滚动级别是什么东西?

Level intLevel
OFF   0
FATAL 100
ERROR 200
WARN  300
INFO  400
DEBUG 500
TRACE 600
ALL   Integer.MAX_VALUE

https://logging.apache.org/log4j/2.x/manual/customloglevels.html

log4j 记录器将记录所有低于其阈值的事件,因此如果设置为 ALL,它将记录每个事件,因为它使用最大值作为其阈值。

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile

这是在定义一个名为 RollingFile 的新滚动文件附加程序。滚动文件附加器是一种附加器,例如,它可以增长到固定大小,然后在删除最旧的条目的同时继续添加新条目。它们也可以是基于时间的等等。

logger.rolling.name = com.test.app
logger.rolling.level = ALL
logger.rolling.appenderRef.rolling.ref = RollingFile

这告诉 log4j 将来自名为 com.test.app 的记录器的任何事件发送到上述 RollingFile appender。 log4j 不会过滤掉任何事件,因为此记录器的级别设置为 ALL。 "rolling" 和 "logger.rolling" 一样只是记录器的标识符。这是必要的,因为属性文件是非结构化的,因此您需要一种方法来区分哪些行放在一起。使用 XML 配置消除了这种需要

rootLogger.level = info

任何由其他记录器创建的未在属性中定义的事件都将被过滤,并且仅记录 INFO 或以下信息。

文档在这里:https://logging.apache.org/log4j/2.x/manual/configuration.html#Properties

要回答您的问题,这取决于如何在应用程序中创建记录器。记录器实际上是在 java 中创建的,这就是分配它们的名称的地方。属性文件仅指示 log4j 如何处理每个记录器。您需要使用 class 中定义的名称将记录器添加到属性文件中。如果 class 本身用于创建记录器,如 apache 所建议的,那么该名称将始终是 class 的完全限定名称。例如:

 logger.secondclass.name = com.test.AnotherClass
 logger.secondclass.level = DEBUG
 logger.secondclass.appenderRef.rolling.ref = RollingFile

现在 com.test.AnotherClass 创建的任何 DEBUG 或以下事件也将发送到 RollingFile appender。

所有这些都在这里解释:https://logging.apache.org/log4j/2.x/manual/architecture.html

让我们一步一步来理解:

appenders = console,rolling

在 appenders 中,我们在想要查看日志的地方写下名称。 假设,我们想在控制台上查看日志和一个文件(滚动类型)

注意:这些附加程序名称是自定义名称。我们可以为 appenders 起任何名字。 例如:附加程序也可以是:

appenders = consoleOutput,myrollingFile

接下来,我们为每个appender定义一些属性。这些属性就像

  • 应如何显示日志消息。
  • 它将以什么模式显示等等

为此,我们使用以下格式:

appender.<appender-name>.<property-name>=<property-value>

例如:

appender.rolling.type = File

这定义了滚动名称的附加程序将以文件类型记录其日志。

接下来,我们定义记录器

loggers = rolling

注意:这些记录器名称是自定义名称。我们可以给记录器起任何名字。

日志记录器通常描述以下内容用于日志记录:

  • 什么包,即包名?
  • 日志的级别应该是多少?
  • 我们将在哪里记录这些特定类型的日志?在控制台上?在文件上?

为此,我们使用以下格式:

logger.<logger-name>.<logger-property>=<property-value>

logger.rolling.name = com.my.package.name  
logger.rolling.level = debug  
logger.rolling.additivity = true  
logger.rolling.appenderRef.rolling.ref = File