10
votes

Comment insérer le nom du dossier de WebApp actuel dans le nom de fichier log4j

J'écris une application Web Java pour déployer à Tomcat et j'utilise log4j pour la journalisation. J'aime insérer automatiquement le nom du dossier de l'application Web dans le nom du fichier de journal généré.

Actuellement, le paramètre de nom de fichier ressemble à ceci dans log4j.properties:

log4j.appender.R.File=${catalina.home}/logs/${current.webapp.folder}.log


0 commentaires

3 Réponses :


0
votes

essaie d'abord d'ajouter votre "log4j.properties". xxx pré>

second, si vous avez utilisé "PropertyConfigurator" ... p>

Properties props = new Property();
/* Read "log4j.properties" */

Properties webappProps = new Property();
/* Read setting ex."current.webapp.folder=myapp" */

Enumeration<Object> e = props.propertyNames();
while (e.hasMoreElements()) {
    String key = (String) e.nextElement();
    // used org.apache.log4j.helpers.OptionConverter
    props.setProperty(
            key, 
            OptionConverter.substVars(props.getProperty(key), webappProps));
}

PropertyConfigurator.configure(props);


1 commentaires

C'est une bonne solution, mais je n'aime pas le nom du dossier de WebApp du tout. Mon application Web pourrait être déployée sur le même tomcat plus d'une fois avec des noms différents. Je veux faire la configuration du fichier journal aussi automatique que possible.



2
votes

Ce n'est pas une solution de fichier de configuration uniquement, donc je garde la question ouverte pendant un moment.

J'ai renommé log4j.properties à myapp-log4j.properties et modifié la propriété Nom du fichier journal tel que ceci: xxx

car j'ai un servlet chargé au démarrage, je initie le log4j dans la fonction init (). xxx

la fonction pour ceci: xxx

Il semble que cela semble fonctionner bien, mais je n'aime pas vraiment ça Je dois modifier le fichier de propriétés dans le code.


1 commentaires

Ummm ... Autre moyen, défi de modifier la propriété système? Mais ce n'est pas le fil sûr ...



4
votes

Vous pouvez obtenir cela à l'aide d'un auditeur de contexte pour configurer une propriété système, puis utiliser la propriété de votre configuration log4j.

Étape 1: Configurez une propriété système h3>

Vous pouvez d'abord définir une propriété système (par exemple, contextpath code>) à la valeur du chemin de contexte Tomcat de l'application. Vous pouvez le faire dans un auditeur de contexte. P>

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %5p %c{1}:%L - %m%n" />
        </Console>
        <RollingFile name="RollingFile" fileName="${catalina.base}/logs/${tomcat.hostname}/${contextPath}.log" 
            filePattern="${catalina.base}/logs/${tomcat.hostname}/$${date:yyyy-MM}/${contextPath}-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" />
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="500 MB" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="org.apache.log4j.xml" level="info" />
        <Root level="info">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="RollingFile"/> 
        </Root>
    </Loggers>
</Configuration>


0 commentaires