I den här handledningen lär vi oss om Java Logging och dess olika komponenter med hjälp av exempel.
Java tillåter oss att skapa och fånga loggmeddelanden och filer genom loggningsprocessen.
I Java kräver loggning ramar och API: er. Java har en inbyggd loggningsram i java.util.logging
paketet.
Vi kan också använda tredjepartsramar som Log4j, Logback och många fler för loggningsändamål.
Java-loggningskomponenter
Figuren nedan representerar kärnkomponenterna och kontrollflödet för Java Logging API ( java.util.logging
).

1. Logger
Den Logger
klass tillhandahåller metoder för loggning. Vi kan starta objekt från Logger
klassen och anropa dess metoder för loggningsändamål.
Låt oss ta ett exempel.
Logger logger = Logger.getLogger("newLoggerName");
Den getLogger()
metod för Logger
klassen används för att hitta eller skapa en ny Logger
. Strängargumentet definierar loggerns namn.
Här skapar detta ett nytt Logger
objekt eller returnerar ett befintligt Logger
med samma namn.
Det är en konvention att definiera en Logger
efter den nuvarande klassen med class.getName()
.
Logger logger = Logger.getLogger(MyClass.class.getName());
Obs! Den här metoden kastas NullPointerException
om det passerade namnet är null
.
Var och en Logger
har en nivå som avgör vikten av loggmeddelandet. Det finns 7 grundläggande loggnivåer:
Loggnivå (i fallande ordning) | Använda sig av |
---|---|
SVÅR | allvarligt misslyckande |
VARNING | varningsmeddelande, ett potentiellt problem |
INFO | allmän körtidsinformation |
KONFIG | konfigurationsinformation |
BRA | allmän utvecklarinformation (spåra meddelanden) |
FINER | detaljerad utvecklarinformation (spåra meddelanden) |
FINASTE | mycket detaljerad utvecklarinformation (spåra meddelanden) |
AV | stäng av loggning för alla nivåer (fånga ingenting) |
ALLT | aktivera loggning för alla nivåer (fånga allt) |
Varje loggnivå har ett heltal som bestämmer deras svårighetsgrad förutom två specialloggnivåer OFF
och ALL
.
Loggar meddelandet
Som standard loggas alltid de tre bästa loggnivåerna. För att ställa in en annan nivå kan vi använda följande kod:
logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE);
I det här exemplet är endast nivå FINE
och nivåer ovan inställda att loggas. Alla andra loggmeddelanden tas bort.
Nu för att logga ett meddelande använder vi log()
metoden.
logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message");
Det finns stenografiska metoder för loggning på önskade nivåer.
logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message");
Alla loggförfrågningar som har passerat den inställda loggnivån vidarebefordras sedan till LogRecord .
Obs: Om en loggers nivå är inställd null
ärvs den från dess förälder och så vidare upp i trädet.
2. Filter
Ett filter (om det finns) avgör om LogRecord ska vidarebefordras eller inte. Som namnet antyder filtrerar det loggmeddelandena enligt specifika kriterier.
Ett LogRecord skickas endast från loggaren till logghanteraren och från logghanteraren till externa system om den uppfyller de angivna kriterierna.
// set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter();
3. Handlers (Appenders)
Logghanteraren eller appenders tar emot LogRecord och exporterar den till olika mål.
Java SE erbjuder 5 inbyggda hanterare:
Hanterare | Använda sig av |
---|---|
StreamHandler | skriver till en OutputStream |
ConsoleHandler | skriver till konsolen |
FileHandler | skriver till filen |
SocketHandler | skriver till fjärr TCP-portar |
MemoryHandler | skriver till minnet |
En hanterare kan skicka LogRecord till ett filter för att avgöra om det kan vidarebefordras till externa system eller inte.
För att lägga till en ny hanterare använder vi följande kod:
logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler);
För att ta bort en hanterare använder vi följande kod:
logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler);
En logger kan ha flera hanterare. För att få alla hanterare använder vi följande kod:
Handler() handlers = logger.getHandlers();
4. Formaterare
En hanterare kan också använda en formaterare för att formatera LogRecord- objektet till en sträng innan den exporteras till externa system.
Java SE har två inbyggda formaterare :
Formaterare | Använda sig av |
---|---|
SimpleFormatter | formaterar LogRecord till sträng |
XMLFormatter | formaterar LogRecord till XML-form |
Vi kan använda följande kod för att formatera en hanterare:
// formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter());
LogManager
Den LogManager objekt håller reda på den globala loggningsinformationen. Det läser och underhåller loggkonfigurationen och loggerinstanserna.
Logghanteraren är en singleton, vilket innebär att endast en instans av den instansieras.
För att få logghanterarinstansen använder vi följande kod:
LogManager manager = new LogManager();
Fördelar med loggning
Här är några av fördelarna med att logga in i Java.
- hjälper till att övervaka flödet av programmet
- hjälper till att fånga upp eventuella fel
- ger stöd för problemdiagnos och felsökning