Hoe Logger.debug() in Log4j in te schakelen

Terwijl u probeert de volgende regels uit te voeren, worden alleen de laatste twee instructies weergegeven (“Here is some ERROR” en “Here is some FATAL”) en de eerste drie statements worden niet weergegeven. Ik was net begonnen met het leren van dit onderwerp, kan iemand vertellen waarom dit gebeurt?

   logger.debug("Here is some DEBUG");
    logger.info("Here is some INFO");
    logger.warn("Here is some WARN");
    logger.error("Here is some ERROR");
    logger.fatal("Here is some FATAL");

de eigenschap log4j. heeft

log4j.rootLogger=debug,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss}(%F:%M:%L)%n%m%n%n

Antwoord 1, autoriteit 100%

Je hebt waarschijnlijk ergens in het project een bestand log4j.properties. In dat bestand kun je configureren welk niveau van debug-output je wilt. Zie dit voorbeeld:

log4j.rootLogger=info, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.logger.com.example=debug

De eerste regel stelt het logniveau voor de rootlogger in op “info”, d.w.z. alleen info, warn, error en fatal worden afgedrukt naar de console (dit is de appender die iets daaronder is gedefinieerd).

De laatste regel stelt de logger in voor com.example.* (als u uw loggers verkrijgt via LogFactory.getLogger(getClass())) zal op debug-niveau zijn, dwz debug zal ook worden afgedrukt .


Antwoord 2, autoriteit 78%

Hier is een snelle eenregelige hack die ik af en toe gebruik om log4j-foutopsporingsregistratie tijdelijk in te schakelen in een JUnit-test:

Logger.getRootLogger().setLevel(Level.DEBUG);

of als u invoer wilt vermijden:

org.apache.log4j.Logger.getRootLogger().setLevel(
      org.apache.log4j.Level.DEBUG);

Opmerking: deze hack werkt niet in log4j2 omdat setLeveluit de API is verwijderd en er geen gelijkwaardige functionaliteit lijkt te zijn.


Antwoord 3, autoriteit 16%

Plaats een bestand met de naam log4j.xmlin je klassenpad. De inhoud is bijv.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/>
        </layout>
    </appender>
    <root>
        <level value="debug"/>
        <appender-ref ref="stdout"/>
    </root>
</log4j:configuration>

Antwoord 4, autoriteit 9%

Dit gebeurt waarschijnlijk omdat uw log4j-configuratie is ingesteld op ERROR. Zoek naar een log4j.properties-bestand met de volgende inhoud:

log4j.rootLogger=ERROR, CONSOLE
# console logging
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %-20.20t %-24c{1}: %m%n

De rootLoggeris hier ingesteld op ERROR-niveau met behulp van een CONSOLE-appender.

Houd er rekening mee dat sommige appenders, zoals de console-appender, ook een eigenschap Thresholdhebben die kan worden gebruikt om het rootLoggers-niveau te overschrijven. In dit geval moet je beide aanvinken.


Antwoord 5, autoriteit 9%

Als je hier komt omdat je Apache commons-logboekregistratie met log4j gebruikt en log4j niet werkt zoals je verwacht, controleer dan of je daadwerkelijk een log4j.jar in je runtime-klassenpad hebt. Die had me een tijdje in de war gebracht. Ik heb nu de runner in mijn ontwikkelomgeving geconfigureerd om -Dlog4j.debugop te nemen in de Java-opdrachtregel, zodat ik altijd kan zien dat Log4j correct wordt geïnitialiseerd


Antwoord 6, autoriteit 4%

U moet het loggerniveau instellen op het laagste dat u wilt weergeven. Als u bijvoorbeeld DEBUG-berichten wilt weergeven, moet u het loggerniveau instellen op DEBUG.

De Apache log4j-handleidingheeft een sectie over Configuratie.


Antwoord 7, autoriteit 4%

Ik gebruik graag een rolling file-apper om de loggegevens naar een bestand te schrijven. Mijn log4j-eigenschappenbestand ziet er meestal ongeveer zo uit. Ik geef de voorkeur aan deze manier omdat ik graag pakketspecifieke logboekregistratie wil maken voor het geval ik verschillende gradaties van logboekregistratie nodig heb voor verschillende pakketten. In het voorbeeld wordt slechts één pakket genoemd.

log4j.appender.RCS=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RCS.File.DateFormat='.'yyyy-ww
#define output location
log4j.appender.RCS.File=C:temp/logs/MyService.log
#define the file layout
log4j.appender.RCS.layout=org.apache.log4j.PatternLayout
log4j.appender.RCS.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm a} %5 %c{1}: Line#%L - %m%n
log4j.rootLogger=warn
#Define package specific logging
log4j.logger.MyService=debug, RCS

Antwoord 8, autoriteit 3%

Dit gebeurt vanwege het feit dat het logniveau van uw logger is ingesteld op ‘error’ – daarom ziet u alleen foutmeldingen of hoger dan dit niveau in termen van ernst, daarom ziet u ook de ‘fatal’ bericht.

Als je het logniveau op ‘debug’ instelt op je logger in je log4j.xml, zou je alle berichten moeten zien.

Bekijk de log4jinleiding voor uitleg.

Other episodes