log4j配置介绍

2019-04-27 18:37|来源: 网路

上一章介绍log4j的核心组件。本章介绍如何使用配置文件来配置这些核心组件。配置log4j涉及分配级别,定义追加程序,并在配置文件中指定布局的对象。

log4j.properties文件是一个键 - 值对保存 log4j 配置属性文件。默认情况下,日志管理在CLASSPATH 查找一个名为 log4j.properties 的文件。

  • 根日志记录器的级别定义为DEBUG并连接附加器命名为X到它

  • 设置名为X的附加目的地是一个有效的appender

  • 设置布局的附加器X

log4j.properties 语法:

以下是 log4j.properties 文件的一个appender X的语法:

# Define the root logger with appender X
log4j.rootLogger = DEBUG, X

# Set the appender named X to be a File appender
log4j.appender.X=org.apache.log4j.FileAppender

# Define the layout for X appender
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.conversionPattern=%m%n


log4j.properties 示例:

使用上面的语法,我们定义 log4j.properties 文件如下:

  • 根日志记录器(logger)的级别定义为DEBUG并连接附加器命名为FILE

  • 附加器(appender)File是定义为org.apache.log4j.FileAppender并写入到一个名为“log.out”位于日志log目录下

  • 定义的布局模式是%m%n,这意味着每打印日志消息之后,将加上一个换行符

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n


需要注意的是log4j支持UNIX风格的变量替换,如 ${variableName}.

调试级别:

使用DEBUG两个追加程序。所有可能的选项有:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL

  • ALL

Appenders:

Apache的log4j提供Appender对象主要负责打印日志消息到不同的目的地,如控制台,文件,sockets,NT事件日志等等。

每个Appender对象具有与之相关联的不同的属性,并且这些属性表明对象的行为

属性 描述
layout Appender使用布局Layout 对象和与之相关的格式化的日志记录信息转换模式
target 目标可以是一个控制台,一个文件,或根据附加器的另一个项目
level 级别是必需的,以控制日志消息的过滤
threshold Appender可以有与之独立的记录器级别相关联的级别阈值水平。Appender忽略具有级别低于阈级别的任何日志消息
filter Filter 对象可以分析超出级别的匹配记录信息,并决定是否记录的请求应该由一个特定 Appender 或忽略处理

可以通过包括以下方法的配置文件中的下面设置一个 Appender 对象添加到记录器:


log4j.logger.[logger-name]=level, appender1,appender..n


可以编写以XML格式相同的结构如下:

<logger name="com.apress.logging.log4j" additivity="false">
   <appender-ref ref="appender1"/>
   <appender-ref ref="appender2"/>
</logger>


如果想要添加Appender对象到程序,那么可以使用下面的方法:

public void addAppender(Appender appender);


addAppender()方法添加一个appender到Logger对象。作为示例配置演示,可以添加很多Appender对象到记录器在逗号分隔的列表,每个打印日志信息分离目的地。

我们仅使用一个附加目的地FileAppender在我们上面的例子。所有可能的附加目的地选项有:

  • AppenderSkeleton

  • AsyncAppender

  • ConsoleAppender

  • DailyRollingFileAppender

  • ExternallyRolledFileAppender

  • FileAppender

  • JDBCAppender

  • JMSAppender

  • LF5Appender

  • NTEventLogAppender

  • NullAppender

  • RollingFileAppender

  • SMTPAppender

  • SocketAppender

  • SocketHubAppender

  • SyslogAppender

  • TelnetAppender

  • WriterAppender


Layout:

我们使用的PatternLayout 使用 appender。所有可能的选项有:

  • DateLayout

  • HTMLLayout

  • PatternLayout

  • SimpleLayout

  • XMLLayout

使用HTMLLayout和XMLLayout,可以在HTML和XML格式和生成日志。

相关问答

更多
  • 你能解释为什么你想更详细地记录多个记录器吗? 我不认为有可能有多个log4j实例。 如果你只是想多个appender,看看这里: http://www.velocityreviews.com/forums/t721794-log4j-different-logger-instances.html 这里是上面链接的log4j.properties: # logj4.properties log4j.rootCategory = WARN, A log4j.category.com.lewscanon = WA ...
  • 你不能使用slf4j,你只需保留log4j的旧配置代码。 slf4j不处理配置部分,这对于所有支持的日志记录系统来说很难概括。 slf4j只是一个用于处理调度到特定日志记录实现的日志记录调用的API。 它还提供了许多桥接,例如将java.util.logging重定向到slf4j。 日志输出会发生什么不是slf4j API的一部分。 You can't use slf4j for that, you just keep your old configuration code for log4j. slf4j ...
  • 您的配置文件未正确写入。 Appender不应该是类/包减速,而是一种你想输出消息的appender(如果你想输出到默认的appender,请保持空白) 该文件看起来应该更像: log4j.rootLogger=FATAL log4j.logger.com.A=DEBUG Your configuration file isn't properly written. Appender shouldn't be the class/package deceleration but a type of ap ...
  • 我终于改变了maven声纳配置文件中的log4g文件链接。 I finally changed the log4g file link in the maven sonar profile.
  • 基于这个问题的答案,log4j2似乎相当复杂(这是我假设您正在使用的,因为您正在讨论使用JSON配置文件,这在log4j 1.x中不存在据我所知)。 如果您愿意使用XML或属性log4j配置并降级到log4j 1.x,则可以使用PropertyConfigurator.configure(String)或DOMConfigurator.configure(String)具体取决于您是使用属性还是XML配置文件。 Based on the answers to this question, it seems ...
  • 你可以,我想定期轮询Log4j API,询问你的自定义appender是否被附加(使用Category.isAttached(appender) ),并在必要时重新附加。 它非常笨重,但我不知道任何通知机制。 You could, I suppose periodically poll the Log4j API asking if your custom appenders are attached (using Category.isAttached(appender)), and re-attach ...
  • 您可能能够使用日志配置DSL构建在不明确访问环境的情况下在环境上进行分支。 environments { development { loggers.add('console') } test { loggers.add('console') } } 这就是说,我不确定你在配置的其他部分试图完成什么,所以可能有更好的方法来处理事情。 You may be able to use the log config DSL construction to branch on environment ...
  • 好的,从你的评论,我在这里尝试。 我想你会在你的应用程序开始时创建你的10个实例。 无论如何。 在你的log4j.xml中,使用name = yourUniqueId定义10 appender(这个唯一的id将是硬编码的) 让这些appender写入yourUniqueid.log ...
  • 当我第一次开始学习log4j ,我首先从这里开始了解它的架构Log4j 。 在那里,您还可以找到使用此API所需的log4j jar的下载链接。 关于log4j.properties文件,您必须自己创建它。 我将在下面添加一个样本 #Define the root logger with the appender FILE log4j.rootLogger = INFO,FILE 将名为FILE的appender设置为File Appender log4j.appender.FILE = org.apac ...
  • 该消息只是一个通知,表明log4j尚未配置为记录来自org.displaytag.properties.TableProperties类(如果有)的消息。 这不是一个问题..通常这可以忽略。 the message is just a notification that log4j hasn't been configured to log messages from org.displaytag.properties.TableProperties class (if any).. this is not ...