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

Log4j2 hvorfor ville du bruge det over log4j?

Grunde til at opgradere fra Log4j 1.x til Log4j 2

Opdatering:siden august 2015 er Log4j 1.x officielt End of Life, og det anbefales at opgradere til Log4j 2. Opdatering 2:Log4j 1.2 er brudt i Java 9.

  • Fællesskabssupport:Log4j 1.x vedligeholdes ikke aktivt, hvorimod Log4j 2 har et aktivt fællesskab, hvor spørgsmål besvares, funktioner tilføjes og fejl rettes.
  • Asynkrone loggere - ydeevne svarende til logning slået fra
  • Tilpassede logniveauer
  • Genindlæs automatisk dens konfiguration ved ændring uden at miste loghændelser under omkonfigurering.
  • Java 8-stil lambda-understøttelse til doven logning
  • Log4j 2 er skraldfri (eller i det mindste lavt skrald) siden version 2.6
  • Filtrering:filtrering baseret på kontekstdata, markører, regulære udtryk og andre komponenter i loghændelsen. Filtre kan tilknyttes loggere. Du kan bruge en fælles Filter-klasse under alle disse omstændigheder.
  • Plugin-arkitektur - let at udvide ved at bygge brugerdefinerede komponenter
  • Understøttede API'er:SLF4J, Commons Logging, Log4j-1.x og java.util.logging
  • Log4j 2 API adskilt fra Log4j 2-implementeringen. API understøtter mere end blot at logge strenge:CharSequences, Objects og custom messages. Meddelelser tillader understøttelse af interessante og komplekse konstruktioner, der kan sendes gennem logningssystemet og manipuleres effektivt. Brugere kan frit oprette deres egne meddelelsestyper og skrive tilpassede layouts, filtre og opslag for at manipulere dem.
  • Forbedringer af samtidighed:log4j2 bruger java.util.concurrent-biblioteker til at udføre låsning på det lavest mulige niveau. Log4j-1.x har kendte deadlock-problemer.
  • Konfiguration via XML, JSON, YAML, egenskabskonfigurationsfiler eller programmatisk.

Vær opmærksom

  • log4j2.xml og log4j2.properties-formaterne er forskellige fra Log4j 1.2-konfigurationssyntaksen
  • Log4j 2 er ikke fuldt kompatibel med Log4j 1.x:Log4j 1.2 API understøttes af log4j-1.2-api adapter, men tilpasninger, der er afhængige af Log4j 1.2 internals, fungerer muligvis ikke.
  • Java 6 kræves til version 2.0 til 2.3. Java 7 er påkrævet til Log4j 2.4 og nyere.

Tips ved opgradering

Almindelige problemer, som folk har, når de kommer i gang med log4j2:

  • Du skal (mindst) både log4j-api-2.6.2.jar og log4j-core-2.6.2.jar i din klassesti
  • Log4j2 leder efter en log4j2 .xml-konfigurationsfil, ikke en log4j.xml-konfigurationsfil
  • Konfigurationsfilplacering:Indsæt den enten i klassestien eller angiv stien med log4j.configurationFile systemegenskab
  • For at fejlsøge konfigurationen skal du bruge <Configuration status="trace"> i begyndelsen af ​​din konfigurationsfil
  • Jeg vil anbefale at starte med en af ​​de mange eksempelkonfigurationer i log4j2-manualen, og derefter tilføje flere klokker og fløjter lidt efter lidt.

Hvis dit problem ikke er et af ovenstående, bedes du vise din konfiguration og give flere detaljer om, hvilket problem du oplever. (Ikke sikker på, hvad du forventer af automatisk konfiguration, dette er en meget grundlæggende funktion, der logger ERROR hændelser til konsollen, hvis log4j2 ikke kan finde en konfigurationsfil. Dette vil sjældent være tilstrækkeligt.)

For at skrive til din hjemmemappe kan du bruge systemegenskabsopslag ${sys:PROPERTYNAME} . Nedenfor er et eksempel på en konfiguration for at demonstrere:

<Configuration status="trace">
  <Properties>
    <Property name="logfile">${sys:user.home}/log${date:yyyyMMdd}.log</Property>
  </Properties>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%m%n"/>
    </Console>
    <File name="FILE" fileName="${sys:logfile}">
      <PatternLayout>
        <pattern>%d %p [%t] %c{1.} %m%n</pattern>
      </PatternLayout>
    </File>
  </Appenders>
  <Loggers>
    <Root level="trace">
      <AppenderRef ref="STDOUT" level="ERROR" />
      <AppenderRef ref="FILE" />
    </Root>
  </Loggers>
</Configuration>

Tjek det her. Kort sagt fra linket:

Log4j 2.0 introducerer:

  • et nyt plugin-system

  • understøttelse af ejendomme

  • understøttelse af JSON-baseret konfiguration og automatisk genindlæsning af dens konfiguration.

Understøttelse af mange eksisterende logningsrammer, herunder SLF4J, Commons Logging, Apache Flume og Log4j 1.x, og giver en ny programmørs API.

Som du sagde, er det også meget hurtigere.

Ulemper er:

  • log4j 2.0 er meget anderledes end log4j 1.x, og API'en er for det meste inkompatibel.

  • Svært at sætte op.

Hvis du ikke har brug for nogen af ​​de nye funktioner, har du det sikkert fint med den ældre Log4j 1.x.


Java tag