IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

log4j2, choisir le fichier de log


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Points : 32
    Points
    32
    Par défaut log4j2, choisir le fichier de log
    Bonjour,

    J'essaye de configurer log4j2 (avec jdk8 et tomcat8) afin de pouvoir initialiser 2 loggers au démarrage, et ensuite dans chaque classe, pouvoir choisir et logger dans tel ou tel fichier suivant le besoin.

    Voilà mon fichier log4j2.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
        <Appenders>
            <Console name="stdout" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
     
            <RollingFile name="rootAppender" fileName="${sys:catalina.base}/logs/myProject/rootLogger.log"
                        filePattern="${sys:catalina.base}/logs/myProject/$${date:yyyy-MM}/rootLogger_%d{dd-MM-yyyy}_%i.log">
                <PatternLayout pattern="%d{dd/MM/yyy HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                </Policies>
            </RollingFile>
     
            <RollingFile name="appender_functionality_1" fileName="${sys:catalina.base}/logs/myProject/logger_functionality_1.log"
                        filePattern="${sys:catalina.base}/logs/myProject/$${date:yyyy-MM}/logger_functionality_1_%d{dd-MM-yyyy}_%i.log">
                <PatternLayout pattern="%d{dd/MM/yyy HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                </Policies>
            </RollingFile>
     
            <RollingFile name="appender_functionality_2" fileName="${sys:catalina.base}/logs/myProject/logger_functionality_2.log"
                        filePattern="${sys:catalina.base}/logs/myProject/$${date:yyyy-MM}/logger_functionality_2_%d{dd-MM-yyyy}_%i.log">
                <PatternLayout pattern="%d{dd/MM/yyy HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                </Policies>
            </RollingFile>
        </Appenders>
        <Loggers>
            <Root level="ALL">
            	<AppenderRef ref="stdout" level="ALL"/>
                <AppenderRef ref="rootAppender" level="ALL"/>
            </Root>
            <logger name="logger_functionality_1" additivity="false" level="ALL">
                <AppenderRef ref="appender_functionality_1" level="ALL"/>
            </logger>
            <logger name="logger_functionality_2" additivity="false" level="ALL">
            	<AppenderRef ref="stdout" level="ALL"/>
                <AppenderRef ref="appender_functionality_2" level="ALL"/>
            </logger>
        </Loggers>
    </Configuration>
    Et dans l'une des classes Java, je voudrais faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.slf4j.LoggerFactory;
     
    public class TestClass {
            private static final Logger logger1= LogManager.getLogger("logger_functionality_1");
    	private static final Logger logger2 = LogManager.getLogger("logger_functionality_2");
     
            public static void main(String[] args) {
                     logger1.info("usecase1");   // doit ecrire dans mon 1er fichier de log logger_functionality_1.log
                     logger2.info("usecase2");   // doit ecrire dans mon 2eme fichier de log logger_functionality_2.log
            }
    }
    Malheureusement, ça ne marche pas du tout !!!
    Lorsque je lance la classe, il me dit qu'il n'arrive pas à initialiser mes loggers et il ne logge rien du tout !

    Qu'est-ce que je ne fais pas correctement ??

    Merci d'avance pour votre aide !

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Qu'est-ce que je ne fais pas correctement ??
    Au hasard: Oublier de lui donner en paramètre ton fichier de config ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    Bonjour, merci pour ton retour.

    Je ne comprends pas très bien ta remarque. Il s'agit de log4j2 ... le fichier log4j2.xml est détecté automatiquement au démarrage du moment qu'il est dans le classpath, sans avoir besoin de config particulière dans le web.xml ou dans la méthode contextInitialized.
    Peux-tu développer stp ?

    Pour être plus précis, voici le retour que j'obtiens en lançant le programme (j'ai l'erreur 2 fois, 1 pour chaque logger):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Unable to create file ${sys:catalina.home}/logs/myProject/logger_functionality_1.log java.io.IOException: La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte
    	at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    	at java.io.File.createNewFile(File.java:1012)
    	at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:307)
    	at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:291)
    	at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:71)
    	at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:61)
    	at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:79)
    	at org.apache.logging.log4j.core.appender.RollingFileAppender.createAppender(RollingFileAppender.java:192)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:497)
    	at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:136)
    	at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:794)
    	at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:734)
    	at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:726)
    	at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:383)
    	at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:161)
    	at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:173)
    	at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:422)
    	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:494)
    	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:510)
    	at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:199)
    	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:233)
    	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41)
    	at org.apache.logging.log4j.LogManager.getContext(LogManager.java:162)
    	at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:507)
    Merci d'avance

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Citation Envoyé par JohnSheppard Voir le message
    Peux-tu développer stp ?
    Non

    Je n'avais pas vu que c'était log4J2 et je ne savais pas dutout qu'il cherchait automatiquement le fichier, tu sembles donc plus en avance que moi sur ce point

    Par contre le "${sys:catalina.home}" semblerait poser un probleme car non interpreté avant de passer cela pour créer le fichier (d'ou l'erreur car un nom de fichier avec ca ne fonctionnera pas).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    Pourtant, j'ai bien mes variables d'environnement %CATALINA_HOME% et %CATALINA_BASE% qui sont là et qui ont la bonne valeur.

    Mais effectivement, si je remplaces ${sys:catalina.home} par le chemin réel (par exemple sous windows: 'C:/tomcat'), ça fonctionne parfaitement !

    Cela dit...cette solution n'est pas satisfaisante, j'ai besoin de faire fonctionner avec catalina.home. Est-ce que tu as des pistes pour résoudre ce problème ?

    Je continue de fouiller sur le net...mais pour l'instant je ne trouve pas grand chose

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/11/2014, 13h22
  2. [Oracle 8i/Fichier de log] - fichier log pour analyse erreur
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 4
    Dernier message: 25/01/2005, 20h06
  3. Choisir un fichier au hasard dans un répertoire
    Par M.Dlb dans le forum Linux
    Réponses: 2
    Dernier message: 09/12/2004, 23h41
  4. [Tomcat] Fichier de logs
    Par yolepro dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 22/03/2004, 17h20
  5. Fichiers de Log
    Par Mouse dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/05/2003, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo