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

Sådan får du andet end root logger fra SLF4J ved hjælp af Log4J

Jeg har set, at dette får root-logger som standard

Nej det er det ikke.

Antag FQN af Name er foo.bar.Name ), når du ringer til private final Logger logger = LoggerFactory.getLogger(Name.class); , får du en logger med navnet foo.bar.Name , som arver fra foo.bar , som arver fra foo , som arver fra root.

Du kan få root-loggeren i SLF4J ved LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)

Loggere er hierarkiske. Logger på børneniveau arver konfigurationer fra sin overordnede (inklusive appenders, niveau osv.). Jeg tror, ​​du var forvirret med hensyn til "at få en børnelogger, som arvede konfigurationen fra ROOT-loggeren" og "hente ROOT-loggeren"

2.Hvordan kan jeg få andre loggere, som er defineret i log4j.xml-filen?

For eksempel, hvis du ønsker at få logger com.example.foo , det er simpelthen ved private final Logger logger = LoggerFactory.getLogger("com.example.foo");

Som nævnt ovenfor er loggere hierarkiske. Hvis du får loggeren "com.example.foo.Bar", da der ikke er nogen specifik indstilling for "com.example.foo.Bar", bør dens adfærd være den samme som at bruge "com.example.foo" (undtagen loggernavnet vises selvfølgelig i loggen).

Da det er almindelig praksis at bruge selve klassenavnet som loggernavnet, giver SLF4J også en metode til at få logger ved at angive en klasse (som hvad du gør i dit spørgsmål), ved Logger logger = LoggerFactory.getLogger(Bar.class); . Dette gør det mere refactoring-venligt. I dette tilfælde vil loggernavnet være det samme som FQN for den angivne klasse ("com.example.foo.Bar")


Java tag