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

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

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

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

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

20 ответов


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

например:

java -Dlog4j.configuration=customName ....

заставит log4j искать файл с именем customName на пути к классам.

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

-Dlog4j.debug

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

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

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's 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

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

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

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

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


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

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

по состоянию на страница FAQ Apache Log4j:

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

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

в основном предупреждение для logger не удалось найти никаких приложений означает, что вы используете log4j система регистрации, но вы не добавили никаких приложений (например, 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, вы можете разместить log4j.properties в: /usr/share/tomcat?/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 тоже не будет. ;)


Читайте также:


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

### 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

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

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


вы можете установить местоположение вашего log4j.свойства из вашего java-приложения с помощью:

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

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


другой способ сделать это, не помещая файл свойств в путь к классам, - установить свойство из кода 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.");
}

}


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

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

например:

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

набор возможных уровнях:

трассировки,

отладка

инфо

предупредить,

ошибка

смертельный

по данным руководство по ведению журнала


import org.apache.log4j.BasicConfigurator;

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

BasicConfigurator.configure();

включить -Dlog4j.debug, Я иду к


в чем вы развиваетесь? Вы используете 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.


мой 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

Я создал файл настройки log4j.свойства на ресурсы далее папку спящий режим.контекстно-свободная грамматика.в 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

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


просто создайте log4j.свойства в папке 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

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

первый-это просто добавить эту строку в метод main:

BasicConfigurator.configure();

второй подход-добавить этот стандартный log4j.файл свойств для пути к классам:

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

например.

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");

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


попробуйте установить атрибут отладки в узле log4j:configuration в true.

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

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


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

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


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

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

  • лесозаготовителей - [ВЫКЛ., ФАТАЛЬНЫЙ, ОШИБКА, ПРЕДУПРЕЖДЕНИЕ, ИНФОРМАЦИЯ, ОТЛАДКА, TRACE]
  • Appenders

    • Ведение Журнала Apache Commons: ConsoleAppender, FileAppender, RollingFileAppender, DailyRollingFileAppender, JDBCAppender -Driver, SocketAppender

    • Log4J Appender для MongoDB: MongoDbAppender - Driver

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

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

  1. log4j_External.свойства " Java properties (key=value) format

строка между отверстием"${" и закрытие"!--9-->}" интерпретируется как ключ. Можно определить значение замещенной переменной как системное свойство или в самом файле конфигурации. Установите конкретные параметры appender. "к log4j.приемщика.appenderName.option=value, для каждого именованного аппендера вы можете настроить его макет.

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
log.mongoDB.password=Yash@123
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:

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

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

  • для " log4j.свойства " вы можете кормить PropertyConfigurator.настройка (java.сеть.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();
    }
}

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

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

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


Это альтернативный способ использования .и 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             

Ref:КОНФИГУРАЦИЯ LOG4J 2: ИСПОЛЬЗОВАНИЕ YAML


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

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..