Goede voorbeelden met java.util.logging

Ik wil logbestanden gebruiken in mijn programma. Ik hoorde over java.util.logging, maar ik weet niet hoe ik moet beginnen.

Zijn er voorbeelden van wat ik kan doen met logboekregistratie? Hoe zou ik inloggen in mijn eigen programma gebruiken?


Antwoord 1, autoriteit 100%

java.util.loggingzorgt ervoor dat u niet nog een jar-bestand met uw toepassing hoeft te sjouwen, en het werkt goed met een goede formatter.

Over het algemeen moet u aan de top van elke klashet volgende hebben:

private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );

Vervolgens kunt u gewoon gebruik maken van verschillende faciliteiten van de Loggerklas.


Gebruik Level.FINEvoor alles dat debuggingop het hoogste niveau van de uitvoeringsstroom:

LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );

Gebruik Level.FINER/ Level.FINESTin lussen en op plaatsen waar u niet altijd zoveel details hoeft te zien bij het debuggen van basisstroomproblemen:

p>

LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );

Gebruik de geparametriseerde versies van de logging-faciliteiten om te voorkomen dat er tonnen aan String-aaneenschakelingsafval worden gegenereerd dat GC zal moeten bijhouden. Object[]zoals hierboven is goedkoop, meestal op de stapeltoewijzing.


Log bij uitzonderingsafhandeling altijd de volledige uitzonderingsdetails:

try {
    ...something that can throw an ignorable exception
} catch( Exception ex ) {
    LOGGER.log( Level.SEVERE, ex.toString(), ex );
}

Ik geef altijd ex.toString()door als het bericht hier, want dan wanneer ik “grep -n” voor “Exception” in logbestanden kan ik het bericht ook zien. Anders komt het op de volgende uitvoerregel die wordt gegenereerd door de stapeldump, en moet u een meer geavanceerde RegEx hebben om ook aan die regel te voldoen, waardoor u vaak meer uitvoer krijgt dan u nodig heeft.


Antwoord 2, autoriteit 19%

Zou logger als volgt moeten declareren:

private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());

dus als je de naam van je klas verandert, volgt deze.

Ik heb een artikel geschreven over java logger met voorbeelden hier.


Antwoord 3, autoriteit 16%

Er zijn veel voorbeelden en ook verschillende soorten logboekregistratie. Bekijk de java.util. loggingpakket.

Voorbeeldcode:

import java.util.logging.Logger;
public class Main {
  private static Logger LOGGER = Logger.getLogger("InfoLogging");
  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}

Zonder hard-coding de klasse naam:

import java.util.logging.Logger;
public class Main {
  private static final Logger LOGGER = Logger.getLogger(
    Thread.currentThread().getStackTrace()[0].getClassName() );
  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}

Antwoord 4, autoriteit 6%

SLF4J is een betere logboekregistratie dan Apache Commons Logging (ACL). Het heeft bruggen naar andere logging-frameworks, waardoor directe oproepen naar ACL, Log4J of Java Util Logging via SLF4J gaan, zodat u alle uitvoer naar één logbestand kunt sturen als u dat wilt, met slechts één logconfiguratiebestand. Waarom zou uw toepassing meerdere logging-frameworks gebruiken? Omdat bibliotheken van derden die u gebruikt, vooral oudere, dat waarschijnlijk doen.

SLF4J ondersteunt verschillende logboekimplementaties. Het kan alles naar standard-out uitvoeren, Log4J gebruiken of Logback (aanbevolen boven Log4J).

http://www.slf4j.org/

http://logback.qos.ch/


Antwoord 5, autoriteit 3%

Ik zou persoonlijk minloggebruiken. Het is uiterst eenvoudig, aangezien de logging-klasse een paar honderd regels code is.


Antwoord 6

Ik zou willen voorstellen dat u APACHE’s Commons Logging-hulpprogramma gebruikt. Het is zeer schaalbaar en ondersteunt afzonderlijke logbestanden voor verschillende loggers. Zie hier .

Other episodes