我正在编写测试Java库的Java代码。该库包含自己的log4j2配置作为分发的一部分。
我想在我的测试代码中使用log4j2而不修改库的配置。
有没有办法为我的测试代码配置单独的log4j2?
这一切都是作为命令行Java运行的,根本没有服务器或Web参与。
编辑以试图更清楚: 我想要的是能够配置记录器,appender等供测试代码使用,同时让库代码使用自己独立的配置文件用于记录。我的想法是在我的测试代码中使用log4j2,但无需更改库的配置文件。由于库配置文件是库分发的一部分,因此我不想更改它以进行测试。
答案 0 :(得分:6)
这可能会有所帮助:
所以一种方法是将库的配置(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)
您可以尝试解决两个问题
<强> 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
答案 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