2012-06-05 5 views
13

Как Log4j управляет несколькими log4j.properties в своем пути к классам? Какой файл log4j.properties имеет приоритет? Позвольте мне описать точный сценарий.Несколько файлов Log4j.properties в пути к классам

У меня есть несколько модулей maven, разработанных разными командами, и каждый из них имеет свой файл log4j.properties. Все эти файлы log4j.properties имеют RootLogger, настроенные вместе с ConsoleAppender и FileAppenders.

Теперь, когда Log4j загружает файл log4j.properties, он будет использоваться для настройки параметров RootLogger? Кроме того, как Log4j создаст иерархию Logger? Как файл log4j.properties в других сторонних банках влияет на процесс ведения журнала?

ответ

9

Будет загружен первый файл в пути к классам. Так что если A.jar и B.jar содержат файл, а A.jar - до B.jar в пути к классам, будет загружен файл A.jar. Так работает загрузчик классов.

+0

У меня есть конкретное требование Если я хочу, чтобы загрузить как файл свойств, как я могу achive это? Я имею в виду файлы log4j.properties из a.jar и b.jar, должны быть загружены ... Есть ли способ? – Gourabp

+0

Зачем вам загружать их обои? Цель экстернализации конфигурации в файл - это возможность настроить ведение журнала так, как вы хотите. Поэтому файлы jar не должны даже поставляться с файлом log4j.xml.Вместо этого они должны документировать, какие регистраторы они используют (по соглашению, имя регистратора - это имя класса), а затем ассемблер приложения, используя оба файла jar, создаст свой собственный файл конфигурации, содержащий конфигурацию для всех библиотек, используемых в заявление. –

+0

Я хочу загрузить их оба из-за того, что я пишу клиент api, где я хочу записывать конкретные журналы клиента api в отдельный файл. приложение может иметь собственный конфигуратор log4j, но я не хочу, чтобы клиентская сторона что-то изменила. Я просто дам им api jar, где будет определен конкретный appender и logger api. Также обратите внимание, что я не хочу его программно программировать, я хочу сделать это по конфигурации. – Gourabp

2

log4j версии 1.x:

Как уже говорилось, log4j ищет первый файл конфигурации в пути к классам. См: http://logging.apache.org/log4j/1.2/manual.html

Но когда оба «log4j.xml» и файлы «log4j.properties» в пути к классам, кажется, из экспериментов, что log4j отдает предпочтение «log4j.xml» над «log4j.properties».

В. Прежде всего, log4j, похоже, выглядит в пути к первому файлу log4j.xml. Если их нет, тогда log4j, похоже, будет выглядеть в пути к первому файлу log4j.properties.

Копирование и вставка из кода ниже, может помочь в определении того, что используется файл конфигурации:

import org.apache.log4j.Logger; 

public class TestLog4j 
{ 

    static 
    { 
    System.out.println("Classpath: [" + System.getProperty("java.class.path") + "]"); 
    System.out.println("Found logging configuration files:"); 
    System.out.println(" log4j.xml: " + Logger.getRootLogger().getClass().getResource("/log4j.xml")); 
    System.out.println(" log4j.properties: " + Logger.getRootLogger().getClass().getResource("/log4j.properties")); 
    } 

    public static void main(String[] args) 
    { 
    System.out.println("main():"); 
    } 
} 

Edit:

log4j версии 2.x:

порядок поиска конфигурационного файла по умолчанию задокументирован здесь: http://logging.apache.org/log4j/2.x/manual/configuration.html

т. Е. Для версии log4j 2.x, если не найден файл конфигурации с более высоким приоритетом (например, log4j2-test. [свойства | yaml | json | xml]), то файл log4j2.properties используется, если найден в пути к классам. Обратите внимание, что log4j2.xml имеет самый низкий приоритет и будет использоваться, только если файлы конфигурации log4j2 'properties', 'yaml' или 'json' не найдены.

Примечание: Чтобы помочь в отладке проблем с конфигурацией log4j, задайте свойство 'log4j.debug', например. с:

java -Dlog4j.debug ... 

Смотрите также:How to initialize log4j properly?

+0

похоже, что все наоборот? обратитесь [link] (https://logging.apache.org/log4j/2.x/manual/configuration.html) –

+0

Ответ отредактирован, чтобы отразить log4j ver 2.x, добавив ссылку на документацию (спасибо @chandra_cst) и дополнительную отладку намек. –

Смежные вопросы