Java >> Java tutorial >  >> Tag >> java.lang

Forskellen mellem java.util.logging.Logger og java.lang.System.Logger

  • java.lang.System.Logger er defineret i modul java.base mens java.util.logging.Logger er defineret i Moduljava.logging
  • Understøttelse af ekstern ramme såsom SLF4J eller Log4J er forbedret.
  • Evne til at håndtere bootstrap-problemer, så platformsklasser kan scanne logmeddelelser, før logforbrugeren initialiseres.

Logningsniveauerne er ændringer helt anderledes sammenlignet med util.logging.Logger :

+--------------------------+-----+-------+-------+------+---------+--------+-----+
|   System.Logger Levels   | ALL | TRACE | DEBUG | INFO | WARNING | ERROR  | OFF |
+--------------------------+-----+-------+-------+------+---------+--------+-----+
| java.util.logging Levels | ALL | FINER | FINE  | INFO | WARNING | SEVERE | OFF |
+--------------------------+-----+-------+-------+------+---------+--------+-----+

Hvis du vil kende motivationen bag java.lang.System.Logger , jeg anbefaler dig kraftigt at læse JEP 264:Platform Logging API og Service


Selvom der kan være subtile forskelle mellem dem, er den vigtigste forskel, at System.Logger (i java.base modul) er en facade , mens java.util.logging.Logger (i java.logging ) er en implementering .

Kerneideen bag dette er, at biblioteksforfattere skriver afhængighedsfri logning i deres kode og lader alle brugere af biblioteket levere deres foretrukne implementering. Det betyder også, at hele din applikation vil bruge den samme logningsramme i stedet for at skulle tune loggeren for hvert eneste bibliotek i din kodebase.

Siden JDK 9 er det muligt ikke at have java.logging i modulgrafen, som virkelig frigør dig til at bruge enhver implementering, du ønsker, uden selv at have ubrugelige pakker i JDK-billedet. I tilfælde java.logging er til stede, bruges den som standard backend, medmindre en anden backend er til stede. Hvis der ikke er en backend til stede, vil den blot udskrive til System.err .


Java tag