【问题标题】:Log4j2 setting log levelsLog4j2 设置日志级别
【发布时间】:2017-10-01 18:51:10
【问题描述】:

我在 Spring 应用程序中使用 log4j2 作为我的日志记录实用程序。我想将特定库/包的日志级别设置为与根目录不同的级别。例如,我希望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 的含义。

如何为特定包添加日志级别以及滚动级别的内容是什么?

【问题讨论】:

  • 你读过this吗?
  • @EdwinDalorzo 是的,但里面没有关于 rolling.level

标签: java spring logging log4j2 rollingfileappender


【解决方案1】:
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 附加程序。 log4j 不会过滤掉任何事件,因为此记录器的级别设置为 ALL。 “logger.rolling”中的“rolling”只是记录器的标识符。这是必要的,因为属性文件是非结构化的,因此您需要一种方法来区分哪些行放在一起。使用 XML 配置消除了这种需要

rootLogger.level = info

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

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

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

 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

【讨论】:

  • 你好 Devon,是否可以只限制 DEBUG 事件并从文件中丢弃 DEBUG 以下的日志事件,例如 INFO、WARN 等?
【解决方案2】:

让我们一步一步理解:

appenders = console,rolling

在 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 

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2016-11-27
    相关资源
    最近更新 更多