Вы правы, log4j.rootLogger должен быть конфигурацией по умолчанию. Поведение, которое вы получаете, происходит, когда у вас нет линии
log4j.rootLogger=INFO, stdout
в вашем файле. Я проверил с вышеуказанным файлом, и это работает для меня. Следовательно, в файле, который вы фактически используете, у вас нет этой строки или вы используете другую версию log4j от меня (я пробовал с 1.2.9 до 1.2.16).
Когда вы указываете -Dlog4j.debug в командной строке, вы должны получить вывод вроде:
log4j: Using URL [file:/C:/developpement/mjf-workspace/Stackoverflow/lib/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL file:/C:/developpement/mjf-workspace/Stackoverflow/lib/log4j.properties
log4j: Could not find root logger information. Is this OK?
log4j: Parsing for [com.rei.framework.model.Table] with value=[INFO, stdout2].
log4j: Level token is [INFO].
log4j: Category com.rei.framework.model.Table set to INFO
Вы получили строку:
log4j: Could not find root logger information. Is this OK?
Если вы получаете это, значит, что-то не так с вашим файлом log4j.properties. Это Java-класс, который я использую для тестирования:
package uk.co.farwell.stackoverflow;
import org.apache.log4j.*;
public class Log4jTest {
static Logger logger = Logger.getLogger(Log4jTest.class);
public static void main(String args[]) {
logger.debug("hello Log4jTest");
}
}
РЕДАКТИРОВАТЬ: Оказывается, что класс Logger, который вы импортируете в класс и, таким образом, используете это регистрация общих Apache, а не log4j. В общем журнале Apache используется rootCategory, а не rootLogger (см. Настройка Log4J :
log4j.rootCategory=INFO, stdout
Вот почему он не берет регистратор по умолчанию. Попробуйте добавить эту строку в ваши log4j.properties.
Не стоит смешивать ваши каркасы логирования, поэтому выберите один и придерживайтесь его. Если регистрация общего пользования работает для вас, используйте это. Но не смешивайте и не сочетайте в своем коде. Это плохая идея, которая приводит к путанице.
Лично я всегда использую slf4j . slf4j позволяет вам иметь одну конфигурацию для нескольких фреймворков, поэтому я использую ее по умолчанию. slf4j часто является обязательным, потому что сторонние библиотеки используют протоколирование общего достояния или даже протоколирование Java, и вы не можете это изменить. slf4j использует мост, чтобы все оказалось в одном и том же месте.
Он также имеет ряд преимуществ, таких как параметризованное ведение журнала .
Рекомендация: используйте slf4j.