Log4j2.xml Konfiguration in web.xml. IllegalArgumentException - uri ist nicht absolut
Vor der Zugabe context-param und Log4jConfigListener für Log4j2
hatte ich alle Protokolle aufgeführt, die in catalina.aus Datei.
So, jetzt, ich bin versucht zu konfigurieren log4j
für meine web-Anwendung.
In web.xml
, die ich Hinzugefügt habe, notwendige Konfiguration.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>etl-service</display-name>
<!-- Support for Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>myprofile</param-value>
</context-param>
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>/WEB-INF/classes/log4j2.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
</web-app>
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" strict="true" name="XMLConfigTest"
packages="">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingRandomAccessFile name="RollingRandomAccessFileDebug" fileName="/local/deploy/logs/debug.log"
filePattern="logs/$${date:yyyy-MM}/etl-%d{MM-dd-yyyy}-%i.log.gz"
immediateFlush="false"
append="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="RollingRandomAccessFile" fileName="/local/deploy/logs/info.log"
filePattern="logs/$${date:yyyy-MM}/etl-%d{MM-dd-yyyy}-%i.log.gz"
immediateFlush="false"
append="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingRandomAccessFile>
<!--<Async name="AsyncConsole">-->
<!--<AppenderRef ref="Console"/>-->
<!--</Async>-->
</Appenders>
<Loggers>
<Root level="TRACE">
<AppenderRef ref="RollingRandomAccessFileDebug" level="DEBUG"/>
<AppenderRef ref="RollingRandomAccessFile" level="INFO"/>
<AppenderRef ref="Console" level="TRACE"/>
</Root>
</Loggers>
</Configuration>
Aber für heute habe ich die folgenden Fehler:
ERROR Unable to access WEB-INF/classes/log4j2.xml java.lang.IllegalArgumentException: URI is not absolute
Vielleicht jemand schon konfrontiert mit einem solchen Problem. Auch das habe ich versucht
statt das hinzufügen von /WEB-INF/classes/log4j.xml
verwenden classpath*:log4j.xml
War und eine Fehler java.net.URISyntaxException: Illegal character in schema name at 9 index: classpath*:log4j.xml
UPDATE:
Müssen wir hinzufügen, nur descriptor-Datei Namen und es funktioniert.
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>log4j2.xml</param-value>
</context-param>
Aber Problem remineds Protokolle aufgeführt, die in catalina.aus Datei. Nicht in meiner log4j-Dateien.
was meinst du mit config? was ist der Standard-Speicherort?
Der Standard-Speicherort ist im root des classpath. Wo haben Sie es. Von "config" - ich meine "Konfiguration". Bleiben Sie sicher, indem Sie die Art und Weise.
Danke, schon gefunden, das Problem. Ich habe <param-value>log4j2.xml</param-value> ohne Verzeichnisse. Und ich thougth,dass s es. Aber jetzt ein weiteres Problem. Alle meine logs geht zu catalina.aber nicht in meiner log4j-Dateien.
Vielleicht sollten wir hinzufügen, dass einige Konfiguration in tomcat/logs/Protokollierung.Eigenschaften
InformationsquelleAutor slisnychyi | 2014-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollte Sie nicht Spring version und Servler version..
Seit dem Frühjahr 4.2.1 die
Log4jConfigListener
ist veraltet.Nehmen wir an, Sie sind mit Spring version 4.2.1(+), Servlet 3.0(+) und Log4j2. Alles was Sie jetzt tun müssen, ist:
log4jConfiguration
context-param innerhalb web.xml mit der Konfiguration angegebene Datei.So dass Sie nicht haben, um geben Sie einen beliebigen listener an alle.
Hier kommt die Log4j2 in der Dokumentation das beschreibt es ziemlich gut.
InformationsquelleAutor franta kocourek
Beachten Sie, dass Ihr log4j-Konfigurationsdatei name ist log4j2.xml, so versuchen, darauf zu log4j.xml ist Recht sinnlos.
Finden Sie, dass, sofern mit servlet-container, der unterhalb von 2,5, Ihre log4j kann konfigurierbar sein durch sich selbst.
Zuerst von allen, überprüfen Sie, ob Ihre log4j-Konfiguration korrekt ist. Start container mit
-Dlog4j.configurationFile
auf Ihre log4j2.xml. Sie können auch hinzufügen Debuggen mit-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=debug
Tomcat verwenden, Bearbeiten Sie Ihre ${catalina.home}/bin/setenv.sh (bzw .Fledermaus, wenn Sie windows verwenden) und fügen Sie es zu JAVA_OPTS-variable.
Wenn Ihr log4j startet die Protokollierung sowohl auf Datei und Konsole, entfernen Sie beide:
sowie:
Frühling ist auf der Grundlage von log4j 1.x, so fügen Sie Abhängigkeiten, um Ihren build (maven-Beispiel):
Wo
log4j-1.2-api
ist die Kompatibilität api, undlog4j-web
ist ein web-application-support.InformationsquelleAutor Augustin Ghauratto
Sehen den source-code der org.springframework.web.util.Log4jConfigListener. Es erwartet Sie eine system property mit Namen "log4jConfigLocation". Diese Eigenschaft halten sollte, den Speicherort der Datei, wenn es in den classpath dann wird sein Wert sein sollte classpath:/logs/log4j2.xml. Wenn es eine Datei-Ressource, dann sollte es file://Users/logs/log4j2.xml.
So fügen Sie ein Kontext-parm in web.xml.
Zum Beispiel:
Beachten Sie auch, dass der Frühling ist Log4jConfigListener arbeitet mit log4j 1.x-version.
InformationsquelleAutor Satyanarayana Midatala