Пожалуйста, инициализируйте систему log4j должным образом

Вот сообщение об ошибке -

log4j:WARN No appenders could be found for logger (SerialPortUtil).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Вот вызов в классе SerialPortUtil -

private static final Logger log = Logger.getLogger(SerialPortUtil.class.getSimpleName());
.
.
.
log.info("Serial port " + port.getName() + " is available");

Вот содержимое моего файла log4j.properties -

log4j.rootLogger=DebugAppender

#Debug logging
log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.Threshold=DEBUG
log4j.appender.DebugAppender.File=activityLog.log
log4j.appender.DebugAppender.MaxFileSize=200KB
log4j.appender.DebugAppender.MaxBackupIndex=5
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%d{DATE} %t - %m%n

И файл свойства находится в пути к классам.

Все выглядит правильно для меня, так что происходит? Должен ли порог DEBUG также записывать INFO logging?

Ответы

Ответ 1

Хорошо, поэтому я заработал, изменив это

log4j.rootLogger=DebugAppender

к этому

log4j.rootLogger=DEBUG, DebugAppender

Очевидно, вам нужно сначала указать уровень ведения журнала на rootLogger? Прошу прощения, если я потратил впустую любое время.

Кроме того, я решил ответить на собственный вопрос, потому что это не проблема с classpath.

Ответ 2

Из ссылки в сообщении об ошибке:

Это происходит, когда файлы конфигурации по умолчанию log4j.properties и log4j.xml не могут быть найдены, и приложение не выполняет явной конфигурации. log4j использует Thread.getContextClassLoader(). getResource() для поиска файлов конфигурации по умолчанию и напрямую не проверяет файловую систему. Знание соответствующего места для размещения log4j.properties или log4j.xml требует понимания стратегии поиска используемого загрузчика классов. log4j не предоставляет конфигурацию по умолчанию, поскольку вывод в консоль или файловая система может быть запрещен в некоторых средах. Также см. Часто задаваемые вопросы. Почему log4j не может найти мои свойства в приложении J2EE или WAR?

Файл конфигурации не найден. Вы используете xml или файл свойств?

Кроме того, используйте logback!

Ответ 3

Если вы столкнулись с ошибкой/предупреждением при запуске программы, использующей log4j, решение должно добавить log4j.properties, который можно увидеть загрузчиком классов. Обычно это в папке "src" вашего Java-проекта: Добавьте в файл следующее содержимое

log4j.rootLogger=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

Ответ 4

Попробуйте сделать что-то вроде следующего в основном:

public static void main(String[] args) {
     PropertyConfigurator.configure(args[0]);
    //... your code

вам нужно указать log4j, какой должна быть его конфигурация.

Ответ 5

Добавьте код

BasicConfigurator.configure();

в вашем статическом основном классе, как показано ниже.

Примечание: добавьте "\ hadoop-2.7.1\share\hadoop\common\lib\commons-logging-1.1.3.jar и \ hadoop-2.7.1\share\hadoop\common\lib\log4j-1.2.17.jar "  как внешние ссылки

import org.apache.log4j.BasicConfigurator;

public class ViewCountDriver extends Configured implements Tool{

    public static void main(String[]args) throws Exception{

        BasicConfigurator.configure(); 

        int exitcode = ToolRunner.run(new ViewCountDriver(), args);
        System.exit(exitcode); 
    }
}

Ответ 6

Чтобы добавить к @Gevorg, если у вас есть аналогичная ситуация, выполняющая Spark локально, поместите файл log4j.properties в папку с именами ресурсов в основной папке.

Ответ 7

Что сработало для меня, так это создать файл свойств log4j (вы можете найти много примеров по сети) и поместить его в папку свойств в каталоге проекта (создайте эту папку, если не exicts). Щелкните правой кнопкой мыши папку и Build Path->Use as Source Folder.

Надеюсь, что это поможет!

Ответ 8

Исправление для меня заключалось в том, чтобы поместить "log4j.properties" в папку "src". Он не работал в моей папке пакета, и он должен быть одним из корней источника. Добавление его в путь сборки, который затем перемещает его в "Справочные библиотеки", также не сработало.

Повторить: поместите log4j.properties в корень вашей папки src.

Мои файлы log4j.properties имеют следующий контент, который работает с последней версией Spring Tool Suite, основанной на Eclipse.

# Configure logging for testing: optionally with log file
#log4j.rootLogger=INFO, stdout
log4j.rootLogger=WARN, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%