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

Sådan ændres logniveau dynamisk i SLF4j ELLER Log4J

Det er ikke muligt at ændre logniveauet dynamisk i slf4j, men nogle backends til slf4j understøtter det, inklusive log4j.

Denne løsning fungerede for mig:

org.apache.log4j.Logger logger4j = org.apache.log4j.Logger.getRootLogger();
logger4j.setLevel(org.apache.log4j.Level.toLevel("ERROR"));

(Kilde:http://prateep.info/2015/12/12/Dynamically-change-log-level-in-SLF4j-Log4J-with-Standalone-Java-Class/)

Ulempen ved denne løsning er, at den bruger backend direkte, hvilket du ikke skal gøre, når du bruger slf4j, fordi pointen med slf4j er at give en abstraktion væk fra den specifikke backend, du bruger.


Overvej Logback http://logback.qos.ch/ - "en efterfølger til det populære log4j-projekt, der fortsætter, hvor log4j stopper". Hvis du bliver bedt om at gøre det, vil logback-classic scanne for ændringer i dens konfigurationsfil og automatisk omkonfigurere sig selv, når konfigurationsfilen ændres. Desuden kan du styre Logbacks logningsniveauer med JMX.


Jeg var nødt til at gøre dette en gang med log4j. Den eneste måde, jeg kunne finde ud af, hvordan jeg gjorde, var at kalde getAllAppenders på Logger-objektet. Gå derefter gennem vedlæggene. Hvis de udvider AppenderSkeleton-klassen (det burde de), vil de have setThreshold-metoden. Kald denne metode med dit nye niveau som parameter. Efterfølgende opkald til loggeren skal bruge det nye niveau. Dette vil indstille niveauet i hukommelsen, men ikke i din log4j-konfigurationsfil. Du vil måske også gøre dette, medmindre det bliver ændret automatisk, når administratoren ændrer niveauet via frontend. Hvis det er en mulighed, kan du overveje at følge Evgeniy Dorofeevs råd og bruge logback. Det lyder som om det ville være nemmere.


Java tag