Java >> Java tutorial >  >> Tag >> Log4j

Kan jeg springe over/udelade en log4j2-konfigurationsfil, der ikke eksisterer, for at falde tilbage til en eksisterende?

Jeg kører log4j2 logning i en java-applikation med ikke den største fleksibilitet i opsætningen. Vi har en eksisterende log4j2.xml konfigurationsfil i klassestien til vores applikation, der findes i en eksekverbar jar. Jeg kan ændre krukken, men ikke hvad kalder den eller er uden for den (jeg kontrollerer ikke miljøet). Jeg vil gerne tilføje en valgfri tilsidesætte log4j2 konfigurationsfil uden for jar. Når det eksisterer, tilsidesætter det log4j2.xml, når det ikke findes, bruges log4j2.xml. Så jeg tilføjede denne egenskab til en log4j2.component.properties fil:

log4j.configurationFile=../conf/log4j2-override.xml

Når jeg opretter denne valgfri fil, fungerer den perfekt. Når jeg ikke opretter denne fil, udskriver log4j2 en fejl om, at filen ikke kan findes, og derefter mislykkes det at falde tilbage til den eksisterende log4j2.xml fil i klassestien. Det ser ud til at være ligegyldigt, om jeg tilføjer den klassesti-specifikke fil til egenskaben configurationFile. Konfigurationsfilen er bestemt tilgængelig, fordi hvis jeg fjerner egenskaben fuldstændigt, bruger den konfigurationen fra jar'ens klassesti.

Det ser ud til, at log4j2 har en fejl ved at lede efter filen og stopper den automatiske konfigurationssekvens i stedet for at fortsætte. Er der overhovedet for mig at tilsidesætte standardkonfigurations-xml-filen uden at kræve, at den er til stede uden for jar, hvis jeg vælger ikke at gøre det? Jeg håber at kunne specificere dette inde fra jar-filen i stedet for at kræve, at den måde, hvorpå jar kaldes, skal ændres baseret på filernes eksistens.

Svar

log4j.configurationFile egenskab giver dig mulighed for at angive en kommasepareret liste over konfigurationskilder, som vil blive flettet ved hjælp af en flettestrategi (se DefaultMergeStrategy for standardreglerne). I dit tilfælde kan du bruge:

log4j.configurationFile=classpath:log4j2.xml,../conf/log4j2-override.cml

Manglende filer vil blive ignoreret, og en advarsel vil blive sendt til statusloggeren.

Log4j 2.13.x er påvirket af fejlen LOG4J2-2901, som stopper konfigurationsprocessen, hvis en fil mangler. Sørg derfor for at bruge den nyeste version.


Java tag