我正在尝试在当前在自由配置文件服务器中运行的REST Web方法中设置异步日志记录(出于性能原因)。
为了做到这一点,我设置了以下属性:
System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
我的问题是,无论我在哪里这样做,有时它会工作并且日志记录非常快,有时则不会。
我在构造函数中尝试了(a)包含所有REST web方法的类(b)在filter doFilter方法中,该方法在REST方法本身的filter init方法(d)中的REST方法(c)之前被调用
这些位置中没有一个能够始终如一地工作。
有人能为这种行为提供解释吗?如果可能的话,还有一种解决问题的建议方法。
编辑:在调用setProperty之前,log4j似乎正在初始化。所以我需要做的是通过自由配置文件设置属性。
显然,我需要在jvm中添加一行代码。选项文件
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
jvm.options文件位于此处:
${server.config.dir}/jvm.options
可以使用以下链接找到该目录:
在我的例子中,它位于:C:\eclipse\runtime\usr\server\serverName
我的问题是,无论我在哪里这样做,有时它会工作并且日志记录非常快,有时则不会。
在定义主切入点的类中的静态初始化块中添加该代码。
public class MainClass {
// NOTE: Nothing can appear before this initializer
// NOTE: This initializer must be in the class that contains your entry point
static {
System.setProperty("Log4jContextSelector",
"org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
}
public static void main(final String[] args) {
// Do anything you want to here
}
}
根据Java规范,静态初始化按照声明的顺序进行。因此,系统。setProperty调用保证在Log4j初始化之前发生。
有一种未记录的方法可以为您的项目设置此值,而无需在启动期间手动传入系统属性值。
添加名为log4j2的文件。组成部分属性。这可以在大多数maven或gradle项目中完成,方法是将其保存在src/main/resources中。
这是一个简单的java文件。util。属性文件。通过向文件中添加以下行来设置上下文选择器的值。
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
Log4j将首先尝试读取系统属性。如果系统属性为null,则默认情况下,它将返回到此文件中存储的值。
执行此设置的代码位于Log4jContextFactory。爪哇:91。
根据Log4j 2手册: LoggerConfig(包括根LoggerConfig)可以配置属性,这些属性将添加到从ThreadContextMap复制的属性中。这些属性可以从应用程序、筛选器、布局等中引用,就像它们是线程上下文映射的一部分一样。 但是,我找不到怎么做。我尝试了以下方法: 使用此配置,ThreadContextMap将不会有任何“关注”键,并且状态记录器将输出: 尝试将属性属性属性
我想让一些记录器异步在log4j2.properties文件。在xml格式中,您可以添加为 我在log4j2中试过了。作为记录器的属性=com foo Bar 但这种语法似乎是错误的。 正确的配置方法是什么?
如何在JMeter 4.0中禁用日志记录。在执行任何JMeter脚本时,都需要根据定义的日志级别生成日志。 log4j2 中的配置应该是什么.xml,以便它不会生成任何日志?
您好,我最近在spring项目中将日志记录从log4j迁移到了log4j2。 一切正常,但我想知道如何设置属性
我正在以JAR的形式运行Spring Boot应用程序。 下面是示例log4j2.xml配置文件 Spring boot应用程序正在创建${sys:logs.location}文件夹,而不是正确地从jvm参数解析系统属性。 我正在使用log4j2-spring.xml配置log4j2。 我已经查看了StackOverflow Q。此答案读取properties Bundle。但我想读取sys属性
假设我们构建了一个JavaSDK,不同的项目可以通过将其添加为类路径中的jar或添加为mavenpom.xml或gradle文件中的依赖项来使用它。当其他项目使用该库时,SDK中的日志在运行时不可见。我尝试使用SL4J,当其他项目使用它时,没有一个日志在运行时可见。我应该用log4j2吗?如果是,我应该在我的SDK中提供log4j配置 /properties文件吗?是否会在运行时从消费者库中提取属