如何为log4j2使用多个配置文件

时间:2014-04-21 15:57:05

标签: java xml logging log4j2 xinclude

我正在编写测试Java库的Java代码。该库包含自己的log4j2配置作为分发的一部分。

我想在我的测试代码中使用log4j2而不修改库的配置。

有没有办法为我的测试代码配置单独的log4j2?

这一切都是作为命令行Java运行的,根本没有服务器或Web参与。

编辑以试图更清楚: 我想要的是能够配置记录器,appender等供测试代码使用,同时让库代码使用自己独立的配置文件用于记录。我的想法是在我的测试代码中使用log4j2,但无需更改库的配置文件。由于库配置文件是库分发的一部分,因此我不想更改它以进行测试。

7 个答案:

答案 0 :(得分:6)

这可能会有所帮助:

  • Log4j2将首先在类路径中查找log4j2-test.xml
  • 如果找不到该文件,它将在类路径中查找log4j2.xml

所以一种方法是将库的配置(log4j2.xml)复制到log4j2-test.xml,并将自己的配置添加到log4j2-test.xml。

此外,Log4j2 supports XInclude in XML configuration,因此您可以使用该功能来避免在log4j2-test.xml中复制库的配置。

答案 1 :(得分:3)

Log4j2支持完全符合您要求的“复合配置”。您需要做的就是提供Backend TkAgg is interactive backend. Turning interactive mode on. Traceback (most recent call last): File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 490, in apply_op preferred_dtype=default_dtype) File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 741, in internal_convert_to_tensor ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref) File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py", line 113, in _constant_tensor_conversion_function return constant(v, dtype=dtype, name=name) File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py", line 102, in constant tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape, verify_shape=verify_shape)) File "C:\Anaconda3\lib\site-packages\tensorflow\python\framework\tensor_util.py", line 364, in make_tensor_proto raise ValueError("None values not supported.") ValueError: None values not supported. 属性中多个文件的路径。这可以从命令行传递,也可以添加到应用程序中的log4j.configurationFile文件中。

参考文献: https://logging.apache.org/log4j/2.x/manual/configuration.html#CompositeConfiguration https://logging.apache.org/log4j/2.x/manual/configuration.html#SystemProperties

答案 2 :(得分:1)

您可以尝试解决两个问题

  • 使用您的自定义名称创建您自己的配置文件(例如:xyz.properties/.xml)
  • 您必须将以下行添加到Java运行时命令
  

<强> CMD&GT; java -Dlog4j.configuration = location / xyz.properties

如果您使用diffent name来配置而不是log4j.properties/.xml文件,您需要在运行时通过上面的命令配置该文件以获取更多信息,看看here..

答案 3 :(得分:0)

使用备用XML文件登录log4j2.xml的正确格式:

java -Dlog4j.configurationFile=./location/log4j2-custom.xml

假设./location/log4j2-custom.xml存在,并且是本次运行中替换log4j2.xml的新XML

请参阅: https://github.com/kamalcph/Log4j2Examples/blob/master/src/main/java/in/co/nmsworks/log4j2/examples/CompositeConfigurationExample.java

答案 4 :(得分:0)

引用https://logging.apache.org/log4j/2.x/manual/configuration.html指出您可以在log4j2.configurationFile属性下添加多个逗号分隔的文件。

答案 5 :(得分:0)

要使用多个配置文件,必须根据环境设置。

例如:

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());
    }

答案 6 :(得分:0)

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