Jak poprawnie zainicjować log4j?

Po dodaniu log4j do mojej aplikacji otrzymuję następujące wyjście za każdym razem, gdy wykonuję moją aplikację:

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

Wydaje się, że oznacza to brak pliku konfiguracyjnego. Gdzie powinien znajdować się ten plik konfiguracyjny i jaka jest dobra zawartość startowa?

Używam zwykłej Javy do tworzenia aplikacji desktopowej. Więc nie webserver itp...

Author: Janusz, 2009-07-17

20 answers

Log4j domyślnie szuka pliku o nazwie log4j. properties lub log4j.xml na ścieżce klasowej. Możesz kontrolować, którego pliku używa do inicjalizacji, ustawiając właściwości systemu zgodnie z opisem tutaj (poszukaj sekcji "domyślna procedura inicjalizacji").

Na przykład:

java -Dlog4j.configuration=customName ....

Spowoduje, że log4j będzie szukał pliku o nazwie customName na ścieżce klasowej.

Jeśli masz problemy uważam, że pomocne jest włączenie log4j. debug:

-Dlog4j.debug

Będzie Drukuj do systemu.wiele przydatnych informacji o tym, który plik został zainicjalizowany, które rejestratory / appendery zostały skonfigurowane i jak itp.

Plik konfiguracyjny może być plikiem właściwości java lub plikiem xml. Oto przykład formatu pliku właściwości pobrany z strony dokumentacji Intro 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'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
 249
Author: polarbear,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-04 09:31:47

Podczas prawidłowego konfigurowania log4j jest Świetne dla "prawdziwych" projektów, możesz potrzebować szybkiego i brudnego rozwiązania, np. jeśli dopiero testujesz nową bibliotekę.

Jeśli tak to wywołanie metody statycznej

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

Skonfiguruje podstawowe logowanie do konsoli, a komunikaty o błędach znikną.

 218
Author: Peter Lind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 15:23:47

Jeśli po prostu pozbędziesz się wszystkiego (np. jeśli jesteś w testach)

org.apache.log4j.BasicConfigurator.configure(new NullAppender());
 23
Author: user831217,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-04 08:01:50

Zgodnie z strona FAQ Apache Log4j :

Dlaczego wyświetla się ostrzeżenie o "nie znaleziono żadnych aplikacji dla loggera" i "proszę poprawnie skonfigurować log4j"?

Występuje, gdy domyślna konfiguracja plików log4j.properties i log4j.xml nie może zostać znaleziona i aplikacja nie wykonuje jawnej konfiguracji. log4j używa Thread.getContextClassLoader().getResource() do zlokalizowania domyślnych plików konfiguracyjnych i nie sprawdza bezpośrednio systemu plików. Znając odpowiednie miejsce do umieszczenia log4j. properties lub log4j.xml wymaga zrozumienia strategii wyszukiwania używanej klasy loader. log4j nie zapewnia domyślnej konfiguracji, ponieważ wyjście do konsoli lub systemu plików może być zabronione w niektórych środowiskach.

Zasadniczo Ostrzeżenie brak appenderów dla loggera oznacza, że używasz log4j system logowania, ale nie dodałeś żadnych aplikacji (takich jak FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, itp.) do pliku konfiguracyjnego lub brakuje pliku konfiguracyjnego.

Istnieją trzy sposoby konfiguracji log4j: za pomocą pliku właściwości (log4j.properties), za pomocą pliku XML i za pomocą kodu Java (rootLogger.addAppender(new NullAppender());).

log4j.properties

Jeśli Masz plik właściwości (np. podczas instalacji Solr), musisz umieścić ten plik w katalogu classpath .

Classpath

Oto kilka sugestii poleceń w Linuksie jak określić swoją classpath wartość:

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

Lub z Javy: System.getProperty("java.class.path").

Log4j XML

Poniżej znajduje się podstawowy plik konfiguracyjny XML dla log4j w formacie 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

Jeśli używasz Tomcat, możesz umieścić swój log4j.properties w folderze: /usr/share/tomcat?/lib/ lub /var/lib/tomcat?/webapps/*/WEB-INF/lib/.

Solr

Dla odniesienia, domyślny plik Solr log4j.properties wygląda następująco:

#  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

Dlaczego log4j nie może znaleźć mojego pliku właściwości w aplikacji J2EE lub WAR?

Krótka odpowiedź: klasy log4j i plik właściwości nie mieszczą się w zakresie tego samego classloadera.

Log4j używa tylko domyślnego mechanizmu Class.forName() do ładowania klas. Zasoby są traktowane podobnie. Więcej informacji można znaleźć w dokumentacji java.lang.ClassLoader.

Więc, jeśli masz problemy, spróbuj załadować klasę lub zasób samodzielnie. Jeśli nie możesz go znaleźć, log4j też nie.;)


Zobacz też:

 19
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-09 15:33:31

Znajdź log4j. properties lub log4j.xml online, który ma root appender, i umieścić go na swojej classpath.

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

Zaloguje się do konsoli. Wolę logowanie niż plik, abyś mógł później zbadać sprawę.

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

Chociaż dla aplikacji rejestrujących 100KB zwykle trzeba zwiększyć do 1MB lub 10MB, szczególnie dla debugowania.

Osobiście skonfigurowałem wiele loggerów i ustawiłem główny logger na ostrzeganie lub poziom błędu zamiast debugowania.

 10
Author: JeeBee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-16 21:24:24

Możesz ustawić lokalizację log4j. properties z poziomu aplikacji java, używając:

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

Więcej informacji można znaleźć tutaj: https://logging.apache.org/log4j/1.2/manual.html

 8
Author: Arash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 03:52:21

Innym sposobem, aby to zrobić bez umieszczania pliku właściwości na classpath, jest ustawienie właściwości bezpośrednio z kodu Javy. Oto przykładowy kod.

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

}

 7
Author: stones333,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-24 22:47:58

Możesz ustawić poziom dziennika za pomocą setLevel () .

Poziomy są przydatne, aby łatwo ustawić rodzaj informacji, które program ma wyświetlać.

Na przykład:

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

Zbiór możliwych poziomów to:

TRACE,

DEBUG,

INFO,

WARN,

Błąd i

FATAL

Zgodnie z Instrukcja obsługi logowania

 5
Author: Math,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-26 12:39:40
import org.apache.log4j.BasicConfigurator;

Wywołanie tej metody

BasicConfigurator.configure();
 5
Author: Winson So,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-24 18:07:20

Aby włączyć -Dlog4j.debug, przechodzę do System, Zaawansowane ustawienia systemowe, zmienne środowiskowe i ustawiam zmienną systemową _JAVA_OPTIONS na -Dlog4j.debug.

 3
Author: Feng Zhang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 22:38:10

W czym się rozwijasz? Używasz 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

Mam taką właściwość w mojej aplikacji Java.

 1
Author: Steven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-16 21:26:01

Mój log4j został naprawiony przez poniższy plik właściwości:

## 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
 1
Author: Kanishk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-29 07:21:34

Utworzyłem plik log4j. properties w folderze resources obok hibernate.cfg.plik xml i wypełnił go tekstem poniżej:

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

Teraz pozbyłem się ostrzeżeń i błędów

 1
Author: Aybek Kokanbekov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-26 06:57:46

Po prostu utwórz log4j. properties w folderze src/main / assembly. W zależności od tego, czy chcesz, aby wiadomości dziennika były wyświetlane w konsoli, czy w pliku, który modyfikujesz. Poniższe wiadomości zostaną wyświetlone w konsoli.

# 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
 1
Author: NSonmez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-21 02:44:52

Jak wyjaśniono wcześniej istnieją 2 podejścia

Pierwszy to dodanie tej linii do głównej metody:

BasicConfigurator.configure();

Drugie podejście polega na dodaniu standardowego pliku log4j. properties do swojej ścieżki klasowej:

Podczas drugiego podejścia musisz upewnić się, że poprawnie zainicjowałeś plik.

Np.

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

Upewnij się, że utworzyłeś folder wymagany do przechowywania plików dziennika.

 1
Author: AkashK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 05:43:22

Spróbuj ustawić atrybut debugowania w węźle log4j: configuration na true.

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

Wyświetla informacje podczas odczytu pliku konfiguracyjnego i służy do konfiguracji środowiska log4j. Możesz uzyskać więcej informacji, aby rozwiązać swój problem.

 1
Author: atom88,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-21 19:15:25

Logowanie API - interfejs Java Logging API ułatwia serwisowanie i konserwację oprogramowania u klientów poprzez tworzenie raportów dzienników odpowiednich do analizy przez użytkowników końcowych, administratorów systemów, inżynierów serwisu w terenie i zespoły programistyczne. Interfejsy API rejestrowania przechwytują informacje, takie jak awarie zabezpieczeń, błędy konfiguracji, wąskie gardła wydajności i/lub błędy w aplikacji lub platformie. Pakiet core zawiera wsparcie dla dostarczania zwykłego tekstu lub XML sformatowane rekordy dziennika do pamięci, strumieni wyjściowych, konsol, plików i gniazd. Ponadto interfejsy API rejestrowania umożliwiają interakcję z usługami rejestrowania, które już istnieją w systemie operacyjnym hosta.

Pakiet java.util.logowanie " dostarcza klasy i interfejsy podstawowych urządzeń rejestrujących platformy Java.


Log4j 1x " log4j to popularne narzędzie do logowania oparte na Javie. Log4j jest open source projekt oparty na pracy wielu autorów. Pozwala programistom kontrolować, które instrukcje dziennika są wysyłane do różnych lokalizacji za pomocą aplikacji [konsola, pliki, DB i e-mail]. Jest w pełni konfigurowalny w czasie wykonywania za pomocą zewnętrznych plików konfiguracyjnych.

Log4j ma trzy główne składniki:

  • [[34]}loggery - [OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE]
  • Appenders

  • Layouts - [PatternLayout, EnhancedPatternLayout]

Pliki konfiguracyjne mogą być zapisywane w formacie XML lub we właściwościach Javy (klucz=wartość).

  1. log4j_External.właściwości " Java properties (klucz=wartość) format

ciąg między otworem "${" i zamknięcie "}" jest interpretowany jako klucz. Wartość podstawionej zmiennej może być zdefiniowana jako właściwość systemowa lub w samym pliku konfiguracyjnym. Ustaw opcje specyficzne dla aplikacji. "log4j. appender./ align = "left" / option = value, dla każdego nazwanego appendera można skonfigurować jego układ.

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

Struktura tabeli MySQL dla tabeli 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: konfiguracja z publicznym plikiem 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. Konfiguracja Log4j z adresu URL w programie Java:

Aby określić niestandardową konfigurację z zewnętrznym plikiem, używana klasa musi zaimplementować Konfigurator interface.

Gdy domyślne pliki konfiguracyjne "log4j. properties", " log4j.xml" nie są dostępne

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();
    }
}
 1
Author: Yash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 14:28:05

Jeśli używamy Apache commons logging wrapper na log4j, to musimy mieć oba Jary dostępne w classpath. Również commons-logging.properties i log4j.properties/xml powinny być dostępne w classpath.

Możemy również przekazać klasę implementacji i log4j.properties nazwę jako JAVA_OPTS używając -Dorg.apache.commons.logging.Log=<logging implementation class name> -Dlog4j.configuration=<file:location of log4j.properties/xml file>. To samo można zrobić poprzez ustawienie JAVA_OPTS w przypadku app/web server.

Pomoże to uzewnętrznić właściwości, które można zmienić podczas wdrażania.

 0
Author: Shiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-19 02:33:17

Jest to alternatywny sposób użycia .yaml

Struktura Logiczna:

Configuration:
    Properties:
    Appenders:
    Loggers:

Próbka:

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 Konfiguracja: USING YAML

 0
Author: emecas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-31 20:52:17

Do testowania, szybki sposób, w tym ustawienie poziomu dziennika:

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..
 0
Author: Baked Inhalf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-13 14:26:05