gpt4 book ai didi

java - 停止来自第三方 Jars 的 log4j 调试打印

转载 作者:行者123 更新时间:2023-12-01 17:59:56 25 4
gpt4 key购买 nike

我正在使用其他 Jars 中的类,这些 Jars 使用其他使用 log4j 的 Jars 中的类。我无法更改这些 jar 中的任何一个。

在 IntelliJ 中进行调试时,许多此类会在启动时将调试打印到控制台。

我正在寻找方法来阻止这种情况,因为这很烦人。

我尝试创建一个具有“错误”日志级别的 log4j.properties 文件,并将其加载到我的应用程序的 main() 中,并将默认记录器设置为“错误”级别。我还检查了所有 Jar 内部都有一个属性,但没有指定日志级别(他们只是说 Jar 是什么版本)。我尝试为要使用的类创建自己的属性文件,但它们在加载文件之前已经打印了调试信息。

以下是一些正在产生的调试信息:

12:54:17.660 [main] DEBUG org.apache.commons.configuration.PropertiesConfiguration - FileName set to xxx.properties
12:54:17.665 [main] DEBUG org.apache.commons.configuration.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is xxx.properties
12:54:17.665 [main] DEBUG org.apache.commons.configuration.DefaultFileSystem - Could not locate file xxx.properties at null: no protocol: xxx.properties
12:54:17.668 [main] DEBUG org.apache.commons.configuration.ConfigurationUtils - Loading configuration from the path xxx.properties
12:54:17.668 [main] DEBUG org.apache.commons.configuration.PropertiesConfiguration - Base path set to file:///C:/myProgram/xxx.properties
12:54:17.680 [main] DEBUG org.apache.commons.configuration.PropertiesConfiguration - FileName set to yyy.properties
12:54:17.680 [main] DEBUG org.apache.commons.configuration.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is yyy.properties
12:54:17.681 [main] DEBUG org.apache.commons.configuration.DefaultFileSystem - Could not locate file yyy.properties at null: no protocol: yyy.properties
12:54:17.681 [main] DEBUG org.apache.commons.configuration.ConfigurationUtils - Loading configuration from the path yyy.properties
12:54:17.681 [main] DEBUG org.apache.commons.configuration.PropertiesConfiguration - Base path set to file:///C:/myProgram/yyy.properties

这是我的 .properties 文件:

---log4j.properties---

log4j.rootLogger=error

---xxx.properties---

log4j.rootLogger=error

---yyy.properties---

log4j.rootLogger=error

我的主要方法是这样开始的:

 public static void main(String[] args) {
PropertyConfigurator.configure("log4j.properties");
Logger.getRootLogger().setLevel(Level.ERROR);

log4j.properties 文件加载正常,没有任何问题,并且对“log4j.rootLogger=error”感到满意。 (如果我添加 ', R' 或 ', stdout' 就像我在 other SO questions 中看到的那样,它会提示,但我怀疑这是因为我在 Windows 上)。

如果这是不可能的,请告诉我,我会接受它,忍受它并停止寻找。

该项目由大量使用 Windows、Mac 和 Linux 的用户运行。 (该项目是一个测试工具,供需要运行 Jars 集合的开发人员为该集合开发新的 Jars 集合)

--- 编辑 ----

我已经研究了将 log4j.xml 放入项目的 src/main/resource 文件夹中的建议,但无法使其工作。

我读到的所有内容都表明 log4j.xml 应该可以工作,但我已经没有什么可以尝试的了。作为最后的尝试,我尝试谷歌: “org.apache.commons.configuration”调试停止谷歌向我发送了我自己的问题哈哈

这是我的 log4j.xml,每次初始化这些类时,它似乎都不会停止每个 jar 调试打印中的 org.apache.commons.configuration(每秒发生几百次)。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>

<appender name="CA" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>

<logger name="org.apache.commons.configuration">
<level value="error"/>
</logger>

<root>
<priority value="off"/>
<appender-ref ref="CA"/>
</root>

</log4j:configuration>

我已经重建了我的项目并重新打包了我的 jar。我希望我不必将 log4j.xml 放入每个 Jar 的资源文件夹中? :/

有没有办法查看它是否正在加载 log4j.xml 文件?

我需要做些什么才能使所有可能实例化自己的 log4j 实例的 Jars 使用此 log4j.xml 吗?

我现在尝试了这个作为我的主要方法:

    public static void main(String[] args) {
PropertyConfigurator.configure("log4j.xml");
Logger.getRootLogger().setLevel(Level.ERROR);

但我仍然看到控制台充斥着来自 org.apache.commons.configuration 的 DEBUG 消息

-- 编辑 2--

还是卡住了。我尝试简单地使用一个非常基本的示例,并且 DEBUG 输出仍然出现在控制台中。

这是我的简单主要方法:

public static void main(String[] args) throws ConfigurationException {
PropertyConfigurator.configure("log4j.xml");
Logger.getRootLogger().setLevel(Level.ERROR);
PropertiesConfiguration config = new PropertiesConfiguration("log4j.xml");
}

以下是导入内容:

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

第三行导致出现以下输出:

10:04:08.526 [main] DEBUG org.apache.commons.configuration.PropertiesConfiguration - FileName set to log4j.xml
10:04:08.536 [main] DEBUG org.apache.commons.configuration.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is log4j.xml
10:04:08.536 [main] DEBUG org.apache.commons.configuration.DefaultFileSystem - Could not locate file log4j.xml at null: no protocol: log4j.xml
10:04:08.546 [main] DEBUG org.apache.commons.configuration.ConfigurationUtils - Loading configuration from the path log4j.xml

这是 log4j.xml,我通过重命名并看到加载文件错误来确认它正在加载。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>

<root>
<level value="error"/>
<priority value="off"/>
</root>

<logger name="org.springframework">
<level value="error"/>
<priority value="off"/>
</logger>

<logger name="org.apache.commons.configuration">
<level value="error"/>
<priority value="off"/>
</logger>


<logger name="org.apache.commons.configuration.PropertiesConfiguration">
<level value="error"/>
<priority value="off"/>
</logger>

<logger name="org.apache.commons">
<level value="error"/>
<priority value="off"/>
</logger>


<logger name="org.apache">
<level value="error"/>
<priority value="off"/>
</logger>


</log4j:configuration>

最佳答案

我创建了一个名为“logback-test.xml”的文件,并尝试将其放在我能想到的每个可能的文件夹中,最后发现如果我将其放入此处“Log4JTest\out\product\Log4JTest”(其中 Log4JTest 是我的测试 IntelliJ 项目的名称)然后就可以找到它。

loopback-test.xml 包含以下内容:

    <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<logger name="org.apache" level="OFF"/>
</configuration>

它似乎已经完成了工作!

这是我的 Main.java

package com.company;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

public class Main {

public static void main(String[] args) throws ConfigurationException {
PropertiesConfiguration config = new PropertiesConfiguration("log4j.xml");
}
}

这是输出控制台:

Connected to the target VM, address: '127.0.0.1:50725', transport: 'socket'
Disconnected from the target VM, address: '127.0.0.1:50725', transport: 'socket'

Process finished with exit code 0

现在要测试整个项目...如果它解决了原始问题,则将其标记为“已解决”。

关于java - 停止来自第三方 Jars 的 log4j 调试打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60655068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com