Log4j2.xml dans la configuration web.xml. IllegalArgumentException - uri n'est pas absolue
Avant d'ajouter context-param et Log4jConfigListener pour Log4j2
, j'ai eu tous les journaux répertoriés dans catalina.hors fichier.
Alors maintenant, je suis en train de configurer log4j
pour mon application web.
Dans web.xml
, j'ai ajouté de configuration nécessaires.
<?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>
Mais pour l'instant j'ai la d'erreur suivant:
ERROR Unable to access WEB-INF/classes/log4j2.xml java.lang.IllegalArgumentException: URI is not absolute
Peut-être que quelqu'un a déjà été confronté à ce problème. Aussi j'ai essayé
au lieu de l'ajout /WEB-INF/classes/log4j.xml
utilisation classpath*:log4j.xml
Et avait un erreur java.net.URISyntaxException: Illegal character in schema name at 9 index: classpath*:log4j.xml
Mise à JOUR:
Nous avons besoin d'ajouter de descripteur nom de fichier et ça fonctionne.
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>log4j2.xml</param-value>
</context-param>
Mais question remineds journaux figurant dans catalina.fichier. Pas dans mon log4j fichiers.
qu'entendez-vous par config? qu'est-ce que l'emplacement par défaut?
L'emplacement par défaut est à la racine du classpath. Où vous l'avez. Par "config", je veux dire "configuration". Rester en sécurité, par la manière.
Merci, déjà trouvé le problème. J'ai ajouté <param-value>log4j2.xml</param-value> en l'absence de répertoires. Et je croyais que,s il. Mais maintenant un autre problème. Tous mes journaux va à catalina.mais pas dans mon log4j fichiers.
On devrait peut-être ajouter un peu de configuration dans tomcat/logs/enregistrement.propriétés
OriginalL'auteur slisnychyi | 2014-02-21
Vous devez vous connecter pour publier un commentaire.
Vous ne spécifiez pas de Printemps version et Servler version..
Depuis le Printemps 4.2.1 la
Log4jConfigListener
est obsolète.Supposons que vous êtes à l'aide de Printemps version 4.2.1(+), Servlet 3.0(+) et Log4j2. Maintenant, tout ce que vous avez à faire est de:
log4jConfiguration
contexte param sein de web.xml avec le fichier de configuration spécifié.De sorte que vous n'avez pas à spécifier n'importe quel auditeur.
Voici le Log4j2 de la documentation qui décrit assez bien.
OriginalL'auteur franta kocourek
Avis, que votre fichier de configuration log4j nom est log4j2.xml, donc essayer de point de log4j.xml est tout à fait inutile.
Veuillez trouver qu'à moins d'utiliser conteneur de servlet 2.5 ci-dessous, votre log4j peut être configurable par lui-même.
Tout d'abord, vérifiez si votre configuration log4j est correct. Démarrer le conteneur avec
-Dlog4j.configurationFile
pointant vers votre log4j2.xml. Vous pouvez également ajouter de débogage avec-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=debug
À l'aide de tomcat, modifier votre ${catalina.home}/bin/setenv.sh (ou .chauve-souris, si vous utilisez windows) et l'ajouter à la variable JAVA_OPTS.
Si votre log4j permettra de démarrer l'enregistrement à la fois des fichiers et de la console, essayez de supprimer les deux:
ainsi que:
Printemps est basé sur log4j 1.x, donc ajouter des dépendances de votre build (maven exemple):
Où
log4j-1.2-api
est la compatibilité de l'api, etlog4j-web
est un support d'application web.OriginalL'auteur Augustin Ghauratto
Voir le code source de org.springframework.web.util.Log4jConfigListener. Il s'attend à un système de propriété par le nom de "log4jConfigLocation". Cette propriété doit contenir l'emplacement du fichier, si c'est dans le classpath sa valeur doit être classpath:/logs/log4j2.xml. Si c'est un fichier de ressources, alors il devrait être file://Users/logs/log4j2.xml.
Ajoutez un contexte parm dans web.xml.
Par exemple:
Noter également que le printemps Log4jConfigListener travaille avec log4j 1.x version.
OriginalL'auteur Satyanarayana Midatala