Java 如何为log4j2使用多个配置文件
我正在编写测试Java库的Java代码。该库包含自己的log4j2配置,作为发行版的一部分 我希望在测试代码中使用log4j2,而不修改库的配置 有没有办法为我的测试代码单独配置log4j2 这一切都是以命令行Java运行的,根本没有服务器或web参与 编辑以尝试更清晰: 我想要的是能够为测试代码配置logger、appender等,同时让库代码为其日志使用自己的单独配置文件。其想法是在测试代码中使用log4j2,但不必更改库的配置文件。由于库配置文件是库发行版的一部分,我不想为了测试而更改它。这可能会有帮助:Java 如何为log4j2使用多个配置文件,java,xml,logging,log4j2,xinclude,Java,Xml,Logging,Log4j2,Xinclude,我正在编写测试Java库的Java代码。该库包含自己的log4j2配置,作为发行版的一部分 我希望在测试代码中使用log4j2,而不修改库的配置 有没有办法为我的测试代码单独配置log4j2 这一切都是以命令行Java运行的,根本没有服务器或web参与 编辑以尝试更清晰: 我想要的是能够为测试代码配置logger、appender等,同时让库代码为其日志使用自己的单独配置文件。其想法是在测试代码中使用log4j2,但不必更改库的配置文件。由于库配置文件是库发行版的一部分,我不想为了测试而更改它。
- Log4j2将首先在类路径中查找Log4j2-test.xml
- 如果找不到该文件,它将在类路径中查找log4j2.xml
此外,Log4j2,因此您可以使用该功能避免在Log4j2 test.xml中复制库的配置。有两个步骤可以解决您的问题
- 使用自定义名称创建自己的配置文件(例如:xyz.properties/.xml)
- 您必须在java运行时命令中添加以下行
log4j.configurationFile
属性中提供多个文件的路径。这可以从命令行传递,也可以添加到应用程序中的log4j2.component.properties
文件中
参考资料:
使用log4j2.XML的备用XML文件的正确格式:
java-Dlog4j.configurationFile=./location/log4j2 custom.xml
假设存在/location/log4j2 custom.xml
,并且是此运行中替换log4j2.xml的新xml
见:
引用说明可以在log4j2.configurationFile属性下添加多个逗号分隔的文件 要使用多个配置文件,必须根据环境设置 例如:
if (env.equals("DEV")) {
setConfigFile("log4j2-dev.xml");
}
public static void setConfigFile(String logConfigFile) {
File file = new File(logConfigFile);
LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
context.setConfigLocation(file.toURI());
}
Log4j从类路径加载配置文件。如果将测试代码类路径放在库类路径之前,则应从测试代码中获取log4j配置。这里有一个关于stackoverflow的问题,这可能会有帮助。谢谢你的回答Alexey,但我认为我的问题不够清楚。我对它进行了编辑以使其更加清晰。谢谢,事实上,我最终合并了测试和分发日志4j2文件。这不是我想要的,但显然没有比这更好的了。我确实尝试过使用Xinclude,但无法使其工作。这还不够重要,不足以花更多的时间让Xinclude策略发挥作用。您在哪里更改“java运行时命令”?我尝试了项目>首选项>运行/调试设置,选择了一些配置,单击了编辑、参数选项卡、VM参数。
first configure application.yaml file
spring:
profiles:
active: dev
---
spring:
message: running in the dev profile //just to output the message in the log
profiles: dev
logging.config: classpath:log4j2-dev.xml
---
spring:
profiles: prod
logging.config: classpath:log4j2-prod.xml
and create these similar files in your classpath
* log4j2-dev.xml
* log4j2-prod.xml