Остановите отладочную печать log4j из сторонних Jars - PullRequest
0 голосов
/ 12 марта 2020

Я использую классы из других Jars, которые используют классы из других Jar, которые используют log4j. Я не могу изменить ни один из этих банок.

Многие из этих классов печатают отладку на консоль при запуске при отладке в IntelliJ.

Я ищу способы остановить это, поскольку это раздражает .

Я попытался создать файл log4j.properties с уровнем журнала «error» и загрузил его в main () моего приложения, а также установил в логгере по умолчанию уровень «error». Я также проверил, и все Jars имеют свойства внутри, но не определяют, какой уровень журнала (они просто говорят, какая версия 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', как я видел в других SO-вопросах , он жалуется, но я подозреваю, что это из-за того, что я нахожусь на Windows).

Если это невозможно, дайте мне знать, и я просто приму это, смирись с этим и перестану искать.

Этот проект управляется большой аудиторией, использующей windows, ma c и linux. (проект является тестовым комплектом для разработчиков, которым необходимо запустить коллекцию Jars, которые разрабатывают новые для коллекции)

--- edit ----

Я исследовал предложение поместить log4j. xml в папку моего проекта src / main / resource, но не могу заставить его работать.

Все, что я прочитал, указывает на log4j. xml должно работать, но я работаю из вещей, чтобы попробовать. В качестве последней попытки я попробовал google: остановка отладки "org. apache .commons.configuration", и Google отправил меня на мой собственный вопрос, ха-ха

Вот мой log4j. xml, который не кажется чтобы остановить org. apache .commons.configuration из каждой отладочной печати jar при каждой инициализации этих классов (что происходит несколько сотен раз в секунду).

<?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?

Есть ли что-то, что мне нужно сделать, чтобы все Jar, которые предположительно запускают свои собственные экземпляры log4j, использовали этот log4j. xml?

Я попробовал это сейчас для моего основного метода:

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

но я все еще вижу спам консоли с сообщениями DEBUG от org. apache .commons.configuration

- edit 2 -

Все еще застрял , Я попытался выполнить простой базовый c пример, и вывод 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;

3-я строка приводит к появлению этого вывода:

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>

1 Ответ

0 голосов
/ 25 марта 2020

Я создал файл с именем «logback-test. xml» и попытался поместить его в каждую возможную папку, о которой я только мог подумать, и наконец нашел, поместил ли я ее сюда «Log4JTest \ out \ production \ 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>

и, похоже, он выполнил свою работу !

Вот мой главный. 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

Теперь, чтобы протестировать полный проект ... отметим это как «решено», если оно решает исходную проблему.

...