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

log4j vs. System.out.println – logger fordele?

Jeg bruger log4j for første gang i et projekt. En medprogrammør fortalte mig, at jeg brugte System.out.println betragtes som en dårlig stil, og at log4j er noget lignende standard for logningsspørgsmål i dag.

Vi laver mange JUnit-tests – System.out ting viser sig at være sværere at teste.

Derfor begyndte jeg at bruge log4j til en konsolcontrollerklasse, der kun håndterer kommandolinjeparametre.

// log4j logger config 
org.apache.log4j.BasicConfigurator.configure();
Logger logger = LoggerFactory.getLogger(Console.class);
Category cat = Category.getRoot(); 

Ser ud til at virke:

logger.debug("String");

Producerer:

1 [main] DEBUG project.prototype.controller.Console  - String

Jeg fik to spørgsmål vedrørende dette:

  1. Ud fra min grundlæggende forståelse burde brugen af ​​denne logger give mig komfortable muligheder for at skrive en logfil med tidsstempler – i stedet for at spamme konsollen – hvis fejlretningstilstand er aktiveret i loggeren?
  2. Hvorfor er System.out.println sværere at teste? Jeg søgte på stackoverflow og fandt en testopskrift. Så jeg spekulerer på, hvilken slags fordel jeg egentlig får ved at bruge log4j.

Svar

Loggeren giver mulighed for at definere forskellige niveauer af vigtighed af de loggede meddelelser og muligheden for at bruge forskellige sink til output - konsollen, en fil osv.

Det er også nemt kun at aktivere eller deaktivere en eller anden type meddelelse, når du bruger en logger - for eksempel ønsker du ikke at se alle fejlretningsmeddelelser i produktionen.

Jeg tror ikke, at brugen af ​​loggere giver nogen væsentlige fordele i enhedstests, men jeg ville alligevel foretrække det selv der. I enhedstests er påstande normalt min primære bekymring.

Btw, du burde virkelig overveje at bruge noget som Commons Logging eller SLF4J som en logramme-facade - det er dårlig stil at binde din kode til en specifik logramme. Common Logging og SLF4J gør det nemt at skifte logningsramme, hvis du vælger det.


Java tag