首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止第三方Jars的log4j调试打印

停止第三方Jars的log4j调试打印
EN

Stack Overflow用户
提问于 2020-03-12 13:24:02
回答 1查看 904关注 0票数 0

我使用来自其他Jars的类,这些Jars使用使用log4j的其他Jars中的类。我不能换这些罐子。

在IntelliJ中调试时,这些类中的许多类都在启动时将调试打印到控制台。

我在找方法来阻止这件事,因为这很让人恼火。

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

下面是正在生成的一些调试聊天程序:

代码语言:javascript
复制
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

代码语言:javascript
复制
log4j.rootLogger=error

-xxx.properties

代码语言:javascript
复制
log4j.rootLogger=error

--是的.房产

代码语言:javascript
复制
log4j.rootLogger=error

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

代码语言:javascript
复制
 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)

-编辑

我已经研究过在我的项目的src/main/ log4j.xml文件夹中放置一个的建议,但是无法让它工作。

我读到的所有内容都表明log4j.xml应该可以工作,但是我已经没有东西可以尝试了。作为最后一次尝试,我试图谷歌:"org.apache.commons.configuration“调试停止和谷歌送我自己的问题哈哈。

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

代码语言:javascript
复制
<?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>

我重建了我的项目,重新包装了我的罐子。我希望我不必将log4j.xml放在每个Jar的资源文件夹中?:/

是否有一种方法可以查看它是否正在加载log4j.xml文件?

我需要做些什么来让所有的Jars都使用这个log4j来实例化自己的log4j.xml实例吗?

我现在尝试了一下我的主要方法:

代码语言:javascript
复制
    public static void main(String[] args) {
        PropertyConfigurator.configure("log4j.xml");
        Logger.getRootLogger().setLevel(Level.ERROR);

但是我仍然看到控制台中有来自org.apache.commons.configuration的调试消息。

-编辑2 --

还是卡住了。我试着简化为一个非常基本的例子,调试输出仍然出现在控制台中。

以下是我的主要方法:

代码语言:javascript
复制
public static void main(String[] args) throws ConfigurationException {
  PropertyConfigurator.configure("log4j.xml");
  Logger.getRootLogger().setLevel(Level.ERROR);
  PropertiesConfiguration config = new PropertiesConfiguration("log4j.xml");
}

以下是进口商品:

代码语言:javascript
复制
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;

第3行将显示此输出:

代码语言:javascript
复制
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,它是通过重命名并看到加载文件错误来加载的。

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-25 14:06:21

我创建了一个名为"logback-test.xml“的文件,并尝试将其放入我能想到的每个可能的文件夹中,最后如果我将它放在这里”Log4JTest \out\project\Log4JTest“(其中Log4JTest是我的测试IntelliJ项目的名称),那么就会找到它。

环回-test.xml有以下内容:

代码语言:javascript
复制
    <?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

代码语言:javascript
复制
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");
    }
}

这是输出控制台:

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60655068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档