Format approprié pour log4j2.configuration du fichier de roulis xml
j'obtiens l'exception suivante dans mon application glassfish 4 qui utilise log4j2:
SEVERE: ERROR StatusLogger Invalid URL C:/glassfish4/glassfish/domains/domain1/config/log4j2.xml java.net.MalformedURLException: Unknown protocol: c
j'ai la section suivante dans mon log4j2.xml:
<RollingFile name="RollingFile" fileName="C:/glassfish4/glassfish/domains/domain1/logs/ucsvc.log"
filePattern="C:/glassfish4/glassfish/domains/domain1/logs/$${date:yyyy-MM}/ucsvc-%d{MM-dd-yyyy}-%i.log">
je comprends que s'il cherche une URL, alors "C:/glassfish4/..."n'est pas le bon format.
cependant, la partie du fichier roulant fonctionne réellement: je vois un fichier log et les fichiers log roulés où je les attends.
Si Je modifier une URL (par exemple fichier:// / C / glassfish4/...) qui ne fonctionne pas du tout.
donc devrais-je ignorer l'exception? (tout semble fonctionner ok). Ou quelqu'un peut-il expliquer le bon format pour cette section de la configuration?
3 réponses
Je n'ai pas encore entièrement déterminé pourquoi c'est que le fichier de configuration fonctionne pour moi aussi bien que L'OP, mais, je peux confirmer que le fait de changer la référence du chemin d'accès à un fichier:// url résout le problème (c'est-à-dire: se débarrasse de l'erreur/avertissement/irritant).
dans mes configurations IntelliJ Run / Debug, pour VM options , j'ai:
-Dlog4j.configurationFile=file://C:\dev\path\to\log4j2.xml
je peux confirmer que '\' sont traduits en '/' donc, pas de soucis.
MODIFIER :
D'accord, tout fonctionne parce qu'ils (les gars d'apache) essaient vraiment de charger la configuration et ils le font, en fait, Charger à partir du fichier comme spécifié via la notation c:\...
. Ils vomissent juste une exception plutôt trompeuse avant de continuer à essayer.
dans ConfigurationFactory:: getConfiguration:
**source = getInputFromURI(FileUtils.getCorrectedFilePathUri(config));**
} catch (Exception ex) {
// Ignore the error and try as a String.
}
if (source == null) {
final ClassLoader loader = this.getClass().getClassLoader();
**source = getInputFromString(config, loader);**
la première ligne en caractères gras essaie de charger d'une URL et échoue, en lançant l'exception. Le code continue alors, apparaît dans getInputFromString:
try {
final URL url = new URL(config);
return new ConfigurationSource(url.openStream(), FileUtils.fileFromURI(url.toURI()));
} catch (final Exception ex) {
final ConfigurationSource source = getInputFromResource(config, loader);
if (source == null) {
try {
**final File file = new File(config);
return new ConfigurationSource(new FileInputStream(file), file);**
où il tente de charger à nouveau la configuration, échoue et tombe dans la prise, tente à nouveau, échoue et finalement réussit sur les lignes en caractères gras (traitant d'un File
).
D'accord, les lignes de code que je voulais mettre en évidence avec bold sont en fait juste enveloppées dans**; Devinez le site ne permet pas les étiquettes imbriquées? De toute façon, y'all obtenir la signification.
tout cela est un peu un gâchis à lire, mais c'est pourquoi cela fonctionne même si vous obtenez cette vilaine exception (et totalement trompeuse).
Merci Jon, j'ai cherché partout.. cela a aidé!
C'est sur Intellij 13, Tomcat 7.0.56
- Dlog4j.configurationFile=file: / / C:\Surendra\workspace\cmdb\resources\elasticityLogging.xml
Le problème n'est pas le contenu de votre log4j2.fichier xml.
le problème est que log4j2 ne peut pas localiser votre log4j2.fichier de configuration xml. Si vous regardez attentivement l'erreur, L'URL déclarée comme non valide est C:/glassfish4/glassfish/domains/domain1/config/log4j2.xml
: le fichier de configuration.
Je ne sais pas pourquoi. Spécifiez-vous l'emplacement du fichier de configuration via la propriété du système -Dlog4j.configurationFile=path/to/log4j2.xml
?
Encore, si la demande et la journalisation fonctionne alors peut-être il n'y a pas de problème. Aussi étrange que. Vous pouvez obtenir plus de détails sur la configuration de log4j en configurant <Configuration status="trace">
en haut de votre log4j2.fichier xml. Cela permet d'imprimer les détails de l'initialisation de log4j sur la console.