Как правильно инициализировать log4j?

После добавления log4j в мое приложение каждый раз, когда я выполняю свое приложение, получаю следующий вывод:

log4j:WARN No appenders could be found for logger (slideselector.facedata.FaceDataParser).
log4j:WARN Please initialize the log4j system properly.

Кажется, это означает, что файл конфигурации отсутствует. Где должен находиться этот файл конфигурации и что такое хорошее начальное содержание?

Я использую простой Java для разработки настольного приложения. Таким образом, нет веб-сервера и т.д.

Ответ 1

Log4j по умолчанию ищет файл с именем log4j.properties или log4j.xml в пути к классам. Вы можете контролировать, какой файл он использует для инициализации, установив свойства системы, как описано здесь (см. Раздел "Процедура инициализации по умолчанию" ).

Например:

java -Dlog4j.configuration=customName ....

Будет вызывать log4j для поиска файла с именем customName в пути к классам.

Если у вас возникли проблемы, мне полезно включить log4j.debug:

-Dlog4j.debug

Он выведет на System.out много полезной информации о том, какой файл он использовал для инициализации, который был настроен регистраторами/добавками и как т.д.

Файл конфигурации может быть файлом свойств java или файлом xml. Вот пример формата файла свойств, взятого из страницы документации документа log4j:

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Ответ 2

При правильной настройке log4j отлично подходит для "реальных" проектов, вам может понадобиться быстрое и грязное решение, например. если вы просто тестируете новую библиотеку.

Если это вызов статического метода

org.apache.log4j.BasicConfigurator.configure();

установит базовое ведение журнала на консоль, и сообщения об ошибках исчезнут.

Ответ 3

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

org.apache.log4j.BasicConfigurator.configure(new NullAppender());

Ответ 4

По Страница часто задаваемых вопросов Apache Log4j:

Почему появляется предупреждение о том, что "Нет приложений, найденных для журнала", и "Пожалуйста, правильно настройте log4j"?

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

В основном предупреждение Нет доступных приложений для регистрации, означает, что вы используете систему регистрации log4j, но вы не добавили любые Appenders (такие как FileAppender, ConsoleAppender, SocketAppender, SyslogAppender и т.д.) в ваш файл конфигурации или файл конфигурации отсутствует.

Существует три способа настройки log4j: с файлом свойств (log4j.properties), с XML файлом и с помощью кода Java (rootLogger.addAppender(new NullAppender());).

log4j.properties

Если у вас есть файл свойств (например, при установке Solr), вам необходимо поместить этот файл в каталог classpath.

CLASSPATH

Ниже приведены некоторые предложения команд в Linux, как определить значение вашего класса:

$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat?

или из Java: System.getProperty("java.class.path").

Log4j XML

Ниже приведен базовый файл конфигурации XML для log4j в формате XML:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>

</log4j:configuration>

Tomcat

Если вы используете Tomcat, вы можете поместить свой log4j.properties в папку: /usr/share/tomcat?/lib/ или /var/lib/tomcat?/webapps/*/WEB-INF/lib/.

Solr

Для справки файл Solr по умолчанию log4j.properties выглядит так:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

Почему log4j не может найти файл свойств в приложении J2EE или WAR?

Короткий ответ: классы log4j и файл свойств не входят в область одного и того же загрузчика классов.

Log4j использует только механизм Class.forName() по умолчанию для загрузки классов. Ресурсы обрабатываются аналогичным образом. Подробнее см. Документацию для java.lang.ClassLoader.

Итак, если у вас возникли проблемы, попробуйте загрузить класс или ресурс самостоятельно. Если вы не можете найти его, то log4j не будет.;)


См. также:

Ответ 5

Вы можете указать местоположение своих log4j.properties из своего приложения java, используя:

org.apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties)

Дополнительная информация доступна здесь: https://logging.apache.org/log4j/1.2/manual.html

Ответ 6

Найдите log4j.properties или log4j.xml онлайн, у которого есть корневой appender, и поместите его в свой путь к классам.

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

запустится на консоль. Я предпочитаю вести журнал в файл, чтобы потом исследовать его.

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

хотя для подробных приложений регистрации 100 КБ обычно необходимо увеличить до 1 МБ или 10 МБ, особенно для отладки.

Лично я настроил несколько журналов и установил корневой журнал для предупреждения или уровня ошибки вместо отладки.

Ответ 7

Другой способ сделать это, не помещая файл свойства в путь к классам, - это установить свойство непосредственно из java-кода. Вот пример кода.

public class Log4JSample {

public static void main(String[] args) {
    Properties properties=new Properties();
    properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile");
    properties.setProperty("log4j.rootCategory","TRACE");

    properties.setProperty("log4j.appender.stdout",     "org.apache.log4j.ConsoleAppender");
    properties.setProperty("log4j.appender.stdout.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender");
    properties.setProperty("log4j.appender.MyFile.File", "my_example.log");
    properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB");
    properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1");
    properties.setProperty("log4j.appender.MyFile.layout",  "org.apache.log4j.PatternLayout");
    properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n");

    PropertyConfigurator.configure(properties);

    Logger logger = Logger.getLogger("MyFile");

    logger.fatal("This is a FATAL message.");
    logger.error("This is an ERROR message.");
    logger.warn("This is a WARN message.");
    logger.info("This is an INFO message.");
    logger.debug("This is a DEBUG message.");
    logger.trace("This is a TRACE message.");
}

}

Ответ 8

Вы можете настроить уровень журнала с помощью setLevel().

Уровни полезны, чтобы легко установить тип информации, которую вы хотите отобразить в программе.

Например:

Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages

Набор возможных уровней:

TRACE,

ОТЛАЖИВАТЬ,

ИНФОРМАЦИЯ,

WARN,

ОШИБКА и

FATAL

Согласно руководству Logging Services

Ответ 9

import org.apache.log4j.BasicConfigurator;

Вызвать этот метод

BasicConfigurator.configure();

Ответ 10

Чтобы включить -Dlog4j.debug, я перехожу к системным, расширенным системным настройкам, переменным среды и задаю системную переменную _JAVA_OPTIONS на -Dlog4j.debug.

Ответ 11

Чем вы занимаетесь? Вы используете Apache Tomcat?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

У меня есть такие свойства, как в приложении Java.

Ответ 12

Мой log4j был исправлен в файле свойств ниже:

## direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=./logs/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

Ответ 13

Я создал файл log4j.properties в папке ресурсов рядом с файлом hibernate.cfg.xml и заполнил его текстом ниже:

log4j.rootLogger=INFO, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n

теперь я избавился от предупреждений и ошибок

Ответ 14

Как объяснялось ранее, существует 2 подхода

Сначала нужно просто добавить эту строку к вашему основному методу:

BasicConfigurator.configure();

Второй подход заключается в том, чтобы добавить этот стандартный файл log4j.properties в ваш путь к классам:

При втором подходе вам необходимо убедиться, что вы правильно инициализировали файл.

Eg.

Properties props = new Properties();

props.load(new FileInputStream("log4j property file path"));

props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

Убедитесь, что вы создали нужную папку для хранения файлов журнала.

Ответ 15

Просто создайте log4j.properties в папке src/main/assembly. В зависимости от того, хотите ли вы, чтобы сообщения журнала отображались в консоли или в файле, вы изменяете свой файл. Следующие сообщения будут отображаться на консоли.

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to 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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Ответ 16

Попробуйте установить атрибут debug в log4j: configuration node в true.

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

Он печатает информацию, когда файл конфигурации считывается и используется для настройки среды log4j. У вас может быть больше информации, чтобы решить вашу проблему.

Ответ 17

API ведения журнала - API регистрации Java облегчает обслуживание и обслуживание программного обеспечения на сайтах клиентов, создавая отчеты журналов для анализа конечными пользователями, системными администраторами, инженерами полевых служб и командами разработки программного обеспечения. API-интерфейсы регистрации регистрируют информацию, такую ​​как сбои безопасности, ошибки конфигурации, узкие места производительности и/или ошибки в приложении или платформе. Основной пакет включает поддержку доставки текстовых или отформатированных записей журнала XML в память, выходные потоки, консоли, файлы и сокеты. Кроме того, API протоколирования могут взаимодействовать с службами ведения журналов, которые уже существуют в операционной системе хоста.

Пакет java.util.logging" Предоставляет классы и интерфейсы основных инструментов регистрации платформы Java.


Log4j 1.x" log4j - популярная утилита ведения журнала на основе Java. Log4j - проект с открытым исходным кодом, основанный на работе многих авторов. Он позволяет разработчику контролировать, какие операторы журналов выводятся в различные местоположения, используя Appenders [консоль, файлы, БД и электронная почта]. Он полностью настраивается во время выполнения с использованием внешних файлов конфигурации.

Log4j имеет три основных компонента:

  • Loggers - [OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE]
  • Appenders

    •   
    • Журнал регистрации Apache: ConsoleAppender, FileAppender, RollingFileAppender, DailyRollingFileAppender, JDBCAppender- Driver, SocketAppender

        
    • Log4J Appender для MongoDB: MongoDbAppender - Driver

        
  • Макеты - [PatternLayout, EnhancedPatternLayout]

Файлы конфигурации могут быть записаны в формате XML или в формате Java (key = value).

  • log4j_External.properties "Формат Java-свойств (ключ = значение)

Строка между открытием" ${ "и закрытием" } "интерпретируется как ключ. Значение замещенной переменной может быть определено как системное свойство или в самом файле конфигурации. Задайте специальные параметры приложения." Log4j.appender.appenderName.option = значение, для каждого именованного приложения вы можете настроить свой макет.

log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql

#log.path=./
log.path=E:/Logs

# https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
# {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]}
log.patternLayout=org.apache.log4j.PatternLayout
log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n

# System.out | System.err
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.err
log4j.appender.CONSOLE.layout=${log.patternLayout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern}

# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log.path}/logFile.log
#log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true)
#log4j.appender.FILE.Append = false
log4j.appender.FILE.layout=${log.patternLayout}
log4j.appender.FILE.layout.ConversionPattern=${log.pattern}

# BackUP files for every Day.
log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender
# [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... }
log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log
log4j.appender.FILE_PER_DAY.DatePattern='_'yyyy-MM-dd
log4j.appender.FILE_PER_DAY.layout=${log.patternLayout}
log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern}

# BackUP files for size rotation with log cleanup.
log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender
# [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2}
log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log
log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB
log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2
log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout}
log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern}

# MySql Database - JDBCAppender
log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.MySql.driver=com.mysql.jdbc.Driver
log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab
log4j.appender.MySql.user=root
log4j.appender.MySql.password=
log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');
#log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m');

# Direct log events[Messages] to MongoDB Collection - MongoDbAppender
log.mongoDB.hostname=loalhost
log.mongoDB.userName=Yash777
[email protected]
log.mongoDB.DB=MyLogDB
log.mongoDB.Collection=Logs

log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
log4j.appender.MongoDB.hostname=${log.mongoDB.hostname}
log4j.appender.MongoDB.userName=${log.mongoDB.userName}
log4j.appender.MongoDB.password=${log.mongoDB.password}
log4j.appender.MongoDB.port=27017
log4j.appender.MongoDB.databaseName=${log.mongoDB.DB}
log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection}
log4j.appender.MongoDB.writeConcern=FSYNCED

Структура таблицы MySQL для таблицы logdata

CREATE TABLE IF NOT EXISTS `logdata` (
  `Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
  `DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `LineNumber` int(10) NOT NULL,
  `Message` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  1. log4j_External.xml "XML log4j: конфигурация с открытым DTD файлом
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration PUBLIC
  "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="false">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="target" value="System.out" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE" class="org.apache.log4j.FileAppender">
        <param name="file" value="E:/Logs/logFile.log" />
        <param name="append" value="false" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_SIZE" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="E:/Logs/logRollingFile.log" />
        <param name="immediateFlush" value="true"/>
        <param name="maxFileSize" value="100KB" />
        <param name="maxBackupIndex" value="2"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" />
        </layout>
    </appender>

    <appender name="FILE_PER_DAY" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="E:/Logs/logRollingDayFile.log" />
        <param name="datePattern" value="'_'yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n"/>
        </layout>
    </appender>

    <root>
        <priority value="info" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_PER_SIZE" />
        <appender-ref ref="FILE_PER_DAY" />
    </root>
</log4j:configuration>

  1. Конфигурация Log4j из URL-адреса в программе Java:

Чтобы указать пользовательскую конфигурацию с внешним файлом, используемый класс должен реализовать интерфейс Configurator.

когда файлы конфигурации по умолчанию "log4j.properties", "log4j.xml" недоступны

  • Для "log4j.properties" вы можете подать в метод PropertyConfigurator.configure(java.net.URL).
  • Для "log4j.xml" DOMConfigurator будет использоваться.
public class LogFiles {
    // Define a static logger variable so that it references the Logger instance named "LogFiles".
    static final Logger log = Logger.getLogger( LogFiles.class );

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE);
        System.out.println("DEFAULT_XML_CONFIGURATION_FILE = 'log4j.xml' « Default access modifier");

        String fileName = //"";
                //"log4j_External.xml";
                "log4j_External.properties";
        String configurationFile = System.getProperty("user.dir")+"/src/" + fileName;

        if( fileName.contains(".xml") ) {
            DOMConfigurator.configure( configurationFile );
            log.info("Extension *.xml");
        } else if ( fileName.contains(".properties") ) {
            PropertyConfigurator.configure( configurationFile );
            log.info("Extension *.properties");
        } else {
            DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender();
            dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log");
            dailyRollingAppender.setDatePattern("'_'yyyy-MM-dd");

            PatternLayout layout = new PatternLayout();
            layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" );
            dailyRollingAppender.setLayout(layout);

            dailyRollingAppender.activateOptions();

            Logger rootLogger = Logger.getRootLogger();
            rootLogger.setLevel(Level.DEBUG);
            rootLogger.addAppender(dailyRollingAppender);

            log.info("Configuring from Java Class.");
        }

        log.info("Console.Message.");
        method2();
        methodException(0);
    }

    static void method2() {
        log.info("method2 - Console.Message.");
    }
    static void methodException(int b) {
        try {
            int a = 10/b;
            System.out.println("Result : "+ a);
            log.info("Result : "+ a);
        } catch (Exception ex) { // ArithmeticException: / by zero
            log.error(String.format("\n\tException occurred: %s", stackTraceToString(ex)));
        }
    }
    public static String stackTraceToString(Exception ex) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        return sw.toString();
    }
}

Ответ 18

Для меня исправлением было поместить "log4j.properties" в папку "src".

Ответ 19

Если мы используем apache commons logging wrapper поверх log4j, тогда нам нужно иметь как банки, доступные в classpath. Кроме того, commons-logging.properties и log4j.properties/xml должны быть доступны в classpath.

Мы также можем передать класс реализации и log4j.properties name как JAVA_OPTS либо с помощью -Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>. То же самое можно сделать, установив JAVA_OPTS в случае приложения/веб-сервера.

Это поможет экпортировать свойства, которые могут быть изменены при развертывании.

Ответ 20

Это альтернативный способ использования .yaml

Логическая структура:

Configuration:
    Properties:
    Appenders:
    Loggers:

Пример:

Configutation:
    name: Default

    Properties:
        Property:
            name: log-path
            value: "logs"

    Appenders:

        Console:
        name: Console_Appender
        target: SYSTEM_OUT
        PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

       File:
          name: File_Appender
          fileName: ${log-path}/logfile.log
          PatternLayout:
            pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"

    Loggers:

        Root:
            level: debug
            AppenderRef:
              - ref: Console_Appender

        Logger:
            - name: <package>.<subpackage>.<subsubpackage>.<...>
              level: debug
              AppenderRef:
                 - ref: File_Appender
                 level: error             

Ссылка: LOG4J 2 КОНФИГУРАЦИЯ: ИСПОЛЬЗОВАНИЕ YAML

Ответ 21

Для тестирования, быстрый способ, включая настройку уровня журнала:

org.apache.log4j.BasicConfigurator.configure();
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.WARN);

// set to Level.DEBUG for full, or Level.OFF..

Ответ 22

Решение Maven:

Я столкнулся с теми же проблемами, что и выше, и для решения maven я использовал 2 зависимости. Эта конфигурация предназначена только для быстрого тестирования, если вы хотите, чтобы в простом проекте использовался регистратор со стандартной конфигурацией. Я могу представить, что вы захотите создать файл конфигурации позже, если вам понадобится дополнительная информация и или точно настроить свои собственные уровни ведения журнала.

    <properties>
        <slf4jVersion>1.7.28</slf4jVersion>
    </properties>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>${slf4jVersion}</version>
        </dependency>