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
3 Réponses :
essaie d'abord d'ajouter votre "log4j.properties". 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);
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.
Ce n'est pas une solution de fichier de configuration uniquement, donc je garde la question ouverte pendant un moment.
J'ai renommé car j'ai un servlet chargé au démarrage, je initie le log4j dans la fonction init (). p> la fonction pour ceci: p> 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. p> p> log4j.properties code> à
myapp-log4j.properties Code> et modifié la propriété Nom du fichier journal tel que ceci: p>
Ummm ... Autre moyen, défi de modifier la propriété système? Mais ce n'est pas le fil sûr ...
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.
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>