Die Tomcat-App meldet: „Das Protokollierungssystem konnte nicht konfiguriert werden.Es wurden keine log.properties gefunden.“
Frage
Ich habe eine eingebettete Tomcat-App und jedes Mal, wenn ich sie starte, wird dieser Fehler zweimal auf der Konsole ausgegeben:
Unable to configure the logging system. No log.properties was found.
Es scheint dumm, aber ich habe ein bisschen gegoogelt und Stackoverflow durchsucht und kann anscheinend niemanden finden, bei dem dieses Problem auftritt.
Meine Hauptklasse sieht ungefähr so aus:
public class AuthServerEntryPoint {
static {
org.apache.log4j.PropertyConfigurator.configure("conf/log4j.properties");
}
public static void main(String[] args) {
// ...
}
„conf/log4j.properties“ enthält eine scheinbar gültige Konfiguration:
log4j.appender.mainAppend=org.apache.log4j.ConsoleAppender
log4j.appender.mainAppend.layout=org.apache.log4j.PatternLayout
log4j.appender.mainAppend.layout.ConversionPattern=%d %p [%t] %c -- %m%n
log4j.appender.fileAppend=org.apache.log4j.FileAppender
log4j.appender.fileAppend.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppend.layout.ConversionPattern=%d %p [%t] %c - %m%n
log4j.appender.fileAppend.file=logs/myservice.log
log4j.rootLogger = info, fileAppend
log4j.logger.com.mycompany.myservice = debug, fileAppend
Und die Protokollierung funktioniert tatsächlich – d. h. die Protokolle werden korrekt in myservice.log geschrieben.Was gibt es also?
Danke!-Carl
Lösung
Von eingebettete Tomcat-App, Bedeuten Sie, dass Sie Tomcat aus Java-Code starten und die Klasse verwenden? org.apache.catalina.startup.Embedded
?
Wenn ja, vermute ich, dass Tomcat seine Protokollierungskonfigurationsdatei, die in eingerichtet ist, möglicherweise nicht finden kann catalina.sh
(oder gleichwertig) bei Verwendung der Skripte:
LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
Das Seltsame daran ist, dass diese Datei aufgerufen wird logging.properties
, nicht log.properties
, also bin ich mir wirklich nicht sicher.Ich habe die Tomcat-Quellen allerdings nicht überprüft, vielleicht praktizieren sie dort eine Art schwarze Magie.
Könnten Sie einfach versuchen, es umzubenennen? $CATALINA_BASE/conf/logging.properties
hinein log.properties
(oder auch nicht) und es in den Klassenpfad Ihrer App zu stellen (oder festzulegen). -Djava.util.logging.config.file
)?
Andere Tipps
Standardmäßig sucht log4j im Klassenpfad nach einer Protokollierungseigenschaftendatei.Legen Sie die Konfigurationsdatei für die Protokollierungseigenschaften Ihrer Webanwendung im Verzeichnis WEB-INF/classes ab.z.B.
$CATALINA_HOME/webapps/<yourApp>/WEB-INF/classes/log4j.properties
Dies ist der einfache Ansatz, um eine Webanwendung dazu zu bringen, Log4j zu verwenden, der in der referenzierten Dokumentation empfohlen wird.Und es ist der Ansatz, den ich selbst für die Webanwendungsprotokollierung verwende.
Es gibt auch verschiedene andere Möglichkeiten, die Log4j-Protokollierung auf Tomcat zu konfigurieren.Es ist möglich, dass Ihr Tomcat (teilweise) für die Verwendung einer davon konfiguriert wurde, aber etwas wurde nicht ganz richtig gemacht.
Die Konfiguration der log4j-Protokollierung von Tomcat über die Systemeigenschaften ist eine Option, die es vermeidet, herauszufinden, wo log4j sucht ...und was läuft schief.Dann müssen Sie jedoch kein benutzerdefiniertes Startskript erstellen/verwenden oder daran denken, Umgebungsvariablen festzulegen, bevor Sie Tomcat starten.
Verweise:
- Konfigurieren der Protokollierung auf Tomcat 5.5
- Konfigurieren der Protokollierung auf Tomcat 6
- Der Abschnitt „Standardinitialisierung unter Tomcat“ des Log4j-Handbuch