当前位置: 首页 > 知识库问答 >
问题:

自定义附加器的log4j2属性文件

陶英纵
2023-03-14

我创建了一个自定义追加器,但在运行测试时没有调用它。以下是这些属性的外观:

name=config
appenders=console, myCustomAppender

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
#appender.console.layout.pattern =%d{HH:mm:ss} [%t] %c{1} [%-5level] - %msg%n
appender.console.layout.pattern=%d{dd-MM-yyyy HH:mm:ss} [%-5p] (%F:%L) - %m%n

appender.myCustomAppender = com.myCompany.logging.log4j.WindowsEventLogAppender
appender.myCustomAppender.name = WindowsEventLogAppender
appender.myCustomAppender.type = WindowsEventLogAppender

rootLogger.level=info
rootLogger.appenderRefs=stdout, myCustomAppender
rootLogger.appenderRef.stdout.ref=STDOUT

我的appender被称为WindowsEventLogappender。知道我的档案有什么问题吗?我看到了控制台测试消息,但没有看到来自我的appender的消息。现在我只是在我的自定义追加器中做一个system.out.println来验证它是否被调用。

共有1个答案

钮出野
2023-03-14

我在这里可能会很晚,但我想我的答案可以帮助其他寻找答案的人。请接受这个答案,如果这是正确的!

如果您创建了带有如下注释的自定义追加器:

@Plugin(name = "MyCustomAppender", category = "Core", 
elementType = "appender", printObject = true)
public final class MyCustomAppenderImpl extends AbstractAppender {
  // other code for the plugin....
}

关于配置附加器的log4j2手册指出:

(注意:我添加了一个stdout(console)appender,只是为了显示与OOTB appender的相关性/相似性,并添加了两个RootLogger和一个自定义记录器的示例用法)

# this packages attribute is important, please put comma seperated package(s) to the 
# plugin(s) you have created
packages = com.package.to.your.plugin

# Example: Declare and Define OOTB Console appender, which sends log events to stdout
appender.console.name = stdout
appender.console.type = Console

# Declare and define the custom appender like this
# Note that the "abc" in "appender.abc.type" can be anything
# and the value for "appender.abc.type" should be the same as 
# "Name" attribute value given in custom appender plugin which is "MyCustomAppender"
appender.abc.name=arbitrary_name
appender.abc.type=MyCustomAppender

rootLogger.appenderRef.stdout.ref = stdout
rootLogger.appenderRef.abc.ref = arbitrary_name    

logger.loggeridentifier.name = com.test.SomeClass
logger.loggeridentifier.appenderRef.stdout.ref = stdout
logger.loggeridentifier.appenderRef.abc.ref = arbitrary_name

# Also note that the value of appenderRef should be the same name given to your 
# appender in properties file, which in this case is "arbitrary_name" (as given above)
 类似资料:
  • 我在为我的Spring Boot应用程序创建一个自定义附加器方面面临着挑战。将引发以下异常: Spring Boot版本:2.1.7 log4j2.properties: 注意:在删除log4j2.properties中的appender引用时,日志会写入log4j2.properties中提到的路径中的文件。因此,问题在于customappender集成。

  • 我正在将log4j1升级到log4j2。我在log4j1中创建了一个自定义appender,并在append(LoggingEvent事件)方法中使用事件检索错误堆栈跟踪。getThrowableStrRep()并为每行追加'\t'。 我在log4j2中没有看到getThrowableStrRep。你能帮我解决我们如何在log4j2中做到这一点吗?

  • 我正在使用log4j2进行一个项目,我的log4j2中有一些值。可配置的属性。该项目还将包括其他组件的配置文件。理想情况下,我希望将所有配置保存在一个地方,以便能够在同一个文件中为log4j设置那些可配置的值,这样我就不会有两个不同的地方更改配置值(例如,包括环境变量)。 我在这方面找到的方法并不理想,比如让我的项目的其他部分从主配置文件中读取值,并将它们放入系统变量中,由log4j获取,因为我希

  • 问题内容: 我在log4j2中创建了一个自定义附加程序。使用自定义追加程序时,出现以下错误:“ ERROR试图追加到未启动的追加程序”。任何帮助表示赞赏。 问题答案: Log4j 2将检查每个日志事件附加器是否处于可用状态。您看到的错误是Log4j检测到尚未准备好使用附加程序。 一些附加器需要进行准备才能使用。在生命周期的方法是其中追加程序可以做初始化的地方。Log4j不会将事件路由到未处于STA

  • 问题内容: 我试图在Log4J2中实现和配置自定义过滤器- 基于ThresholdFilter,但打算做更多。我已经看到了有关自定义追加程序的主题,这些主题遵循相同的插件注释语法,但是还没有找到有关自定义拟合程序的主题。 MyCustomFilter.java (基于ThresholdFilter) log4j2.xml LoggingRunner.java 配置语法似乎与Apache文档中的语法

  • 我基于此主题为log4j2记录器做了一个包装:如何向log4j消息添加前缀(在对象级别) 以下是我所拥有的: 进口org.apache.log4j.记录仪; 用法: 问题: 作为输出,我有一个到类的链接 "LogWrapper.java:17"它没有指向中调用记录器的行。 如何解决?