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

Custom ConfigurationFactory kombineret med konfigurationsfil i log4j2

Jeg løste dette problem ved at ringe til

System.setProperty("log4j.configurationFactory", CustomConfigurationFactory.class.getName());

Som et alternativ kan du bruge denne JVM-startparameter:
-Dlog4j.configurationFactory=factory.CustomConfigurationFactory

i stedet for

ConfigurationFactory.setConfigurationFactory(new CustomConfigurationFactory());

før du får adgang til LogManager for første gang.

-

EDIT: Du kan også konfigurere denne indstilling i filen log4j2.component.properties .

Indhold:

log4j.configurationFactory=factory.CustomConfigurationFactory

Ved at gøre det kan du være sikker på, at denne indstilling anvendes, før nogen loggerklasser indlæses, og undgå de potentielle problemer med klasseinitialiseringsrækkefølgen.

Hvis du leder efter brug af org.apache.logging.log4j.util.PropertiesUtil i Log4j2-kilderne kan du finde alle indstillinger, der kan konfigureres på den måde.

-

Under analyse/fejlretning af problemet bemærkede jeg, at min ConfigurationFactory blev oprettet, men ikke brugt til at hente konfigurationen.

Endelig fandt jeg denne passage i dokumenterne, som forklarer det hele (vi kaldte nok ikke setConfigurationFactory tidligt nok):

Under initialisering vil Log4j 2 søge efter tilgængelige ConfigurationFactories og derefter vælge den, der skal bruges. Den valgte ConfigurationFactory opretter den konfiguration, som Log4j vil bruge. Her er hvordan Log4j finder de tilgængelige ConfigurationFactories:

  1. En systemegenskab med navnet "log4j.configurationFactory" kan indstilles med navnet på den ConfigurationFactory, der skal bruges.
  2. ConfigurationFactory.setConfigurationFactory(ConfigurationFactory) kan kaldes med den forekomst af ConfigurationFactory, der skal bruges. Dette skal kaldes før andre opkald til Log4j.
  3. En ConfigurationFactory-implementering kan tilføjes til klassestien og konfigureres som et plugin i kategorien "ConfigurationFactory". Ordrekommentaren kan bruges til at angive den relative prioritet, når der findes flere relevante konfigurationsfabrikker.

Java tag