Как правильно инициализировать 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 на сайте Apache
- Apache: услуги регистрации: FAQ на сайте Apache
найдите 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
набор возможных уровнях:
трассировки,
отладка
инфо
предупредить,
ошибка
смертельный
по данным руководство по ведению журнала
в чем вы развиваетесь? Вы используете 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
, SocketAppenderLog4J Appender для MongoDB: MongoDbAppender -
Driver
- Макеты - [PatternLayout, EnhancedPatternLayout]
файлы конфигурации могут быть записаны в формате XML или Java properties (key=value).
- 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;
- 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>
- конфигурация 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
для тестирования, быстрый грязный способ, включая настройку уровня журнала:
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..