Пожалуйста, правильно инициализируйте систему log4j, предупреждая - PullRequest
22 голосов
/ 20 января 2012

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

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 протоколирование?

Ответы [ 10 ]

8 голосов
/ 20 января 2012

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

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

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

Также используйте logback !

7 голосов
/ 20 января 2012

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

log4j.rootLogger=DebugAppender

к этому

log4j.rootLogger=DEBUG, DebugAppender

Видимо, вы должны сначала указать уровень ведения журнала для rootLogger? Я прошу прощения, если я потратил чье-то время.

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

3 голосов
/ 02 ноября 2016

Исправление для меня заключалось в том, чтобы поместить файл «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%
3 голосов
/ 13 октября 2016

Добавить код

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); 
    }
}
3 голосов
/ 19 июля 2014

Если вы сталкиваетесь с ошибкой / предупреждением при запуске программы, которая использует 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
1 голос
/ 17 марта 2019

Эта работа для меня:

public static void main(String[] args) {

        Properties props = new Properties();
        props.load(new FileInputStream("src/log4j.properties"));
        PropertyConfigurator.configure(props);
1 голос
/ 09 августа 2017

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

1 голос
/ 20 января 2012

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

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

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

0 голосов
/ 17 октября 2018

просто настройте путь к файлу свойств log4j в начале основного метода: например: PropertyConfigurator.configure ("D: \ files \ log4j.properties");

0 голосов
/ 14 мая 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...