2012-06-27 4 views
0

Я хочу настроить log4j для тестовых примеров JUnit. Мои тесты распространяются по нескольким файлам, но имеют ту же настройку log4j. Где я могу это сделать?Настройка log4j для JUnit

Я не хочу использовать файл свойств log4j.

+0

Что означает u в качестве файла свойств log4j ... это log4j.xml? –

+0

Да. Я хочу настроить log4j через код. –

+1

Почему вы не хотите использовать log4j.xml .... есть какие-то конкретные требования –

ответ

0

Мое решение, которое, похоже, работает.

Написать пользовательский класс, который расширяет систему LOG4J

общественного класса myLogger расширяет Logger { ... материал ...

}

для 'вещи', необходимо реализовать следующее (или, по крайней мере, я)

Конструктор какого-то типа public myLogger (String name)

.. в каждом классе, где вы хотите/должны включать статический член myLogger

private static final myLogger errorLog = new myLogger("nameOfClassOrWhateverNameYouFancy") 

Если вы используете один и тот же имя во всех классах они будут входить в систему в случае же регистрации (это вам вероятно, уже знаете)

назад в своем классе myLogger вам нужно реализовать метод для установки уровня журнала (это, как я это сделал ...)

/** 
* 
* The add(int i, String s) method 
* @param s the message string 
* 
* @param i used in the switch to create the required level of debug 
* @param s the message to send 
* 
* use this method to create a log message of any required level 
* The levels are as follows: 
* 1 debug - used during production 
* 2 info - may be used for messages to user 
* 3 warn - warnings for requesting users re-enter information (data type checking etc) 
* 4 error - programmatic/user error may result in unexpected output 
* 5 fatal - severe error (comms error) the system will terminate, cleanly if possible, current state will be written to file 
* 
* Prior to all this however the method determines the calling class of itself 
* 
*/ 

public void add(int i, String s) 
{ 




    switch (i) 
    { 
    case 1: log.debug(s);break; 
    case 2: log.info(s);break; 
    case 3: log.warn(s);break; 
    case 4: log.error(s);break; 
    case 5: log.fatal(s);break; 
    } 
} 

Теперь, если вы хотите какой-то конкретный Loging примеры для странных uff 'у вас есть 2 варианта, как я уже говорил ранее, вы можете создать статический член в названном журнале, или вы можете добавить статические члены в свой класс myLogger (как я это сделал).

Тогда для каждого из этих статических членов вы, вероятно, хотите уникальный

set[nameOfLogger](int i, string s) 

, который в основном имеет такой же структуры, что и выше способа.

Теперь, если вы хотите, чтобы вызвать его из класса вы звоните

myLogger.set[nameOfLogger](1, "s") 

и вы уезжаете.

Затем вам необходимо добавить информацию о уровне журнала (DEBUG, WARN и т. Д.) И куда отправлять сообщения (консоль, файл и т. Д.) В свои log4j.properties (как я использую) или в файл log4j.xml ,

Не забудьте убедиться в том, что строки, связанные с установкой статических именованных логгеров, происходят после экземпляра rootLogger, который давно меня заставил!

Я включил то, что я чувствую, довольно обширное обучение, так как я боролся с этим довольно долгое время и только получил его до окончательной работы сегодня!

Я счастливый кролик в настоящее время .... до тех пор пока я нарушу что-то еще;)

David

К сожалению только что заметил, что вы не хотите использовать файл log4j.properties. по какой-либо причине?

Если не только

import org.apache.log4j.Logger; 

создать экземпляр протоколирования

private Logger jUnitTestingLogger; 

затем установите вывод, используя различные вызовы методов (я имею в виду особенно надстройкой Appender), я никогда сделал это так, чтобы не знал, как!

Интересно, что существует метод assertLog (булевское утверждение, строковое сообщение), который может быть полезен для вас в вашем случае.

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