2016-07-01 11 views
-1

Warum Logging "1 MAIN INFO" funktioniert nicht, wenn ich die gesamte Protokollierung von Core-Bibliotheken durch .level = OFF deaktiviert. Aber für mein Paket habe ich alle Logging aktiviert. Warum funktioniert es nur, nachdem ich den zweiten Logger installiert habe?java.util.logging funktioniert nicht richtig "Bug oder Feature"

LibClass libClass = new LibClass();

package com.mycompany; 
    public class Main { 
     private final static Logger logger = Logger.getLogger(Main.class.getName()); 
     public static void main(String[] args) throws IOException { 
      FileInputStream fis = new FileInputStream("log.prop") 
      LogManager.getLogManager().readConfiguration(fis); 
      logger.info("1 MAIN INFO"); 
      LibClass libClass = new LibClass(); 
      libClass.doWork(); 
      logger.info("3 MAIN INFO"); 
    } 
} 

package com.mycompany; 
    public class LibClass { 
    private final static Logger logger = Logger.getLogger(LibClass.class.getName()); 
    public void doWork() { 
     System.out.println("doWork"); 
     logger.info("2 doWork INFO"); 
}} 


handlers= java.util.logging.ConsoleHandler 
.level = OFF 
java.util.logging.ConsoleHandler.level = ALL 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 
com.mycompany.level = ALL 

Ausgabe

doWork 
[Пт июл 01 22:37:29 EEST 2016] INFO: com.mycompany.LibClass doWork - 2 doWork INFO 
[Пт июл 01 22:37:29 EEST 2016] INFO: com.mycompany.Main main - 3 MAIN INFO 
+0

was aus sind Ihre bekommen, und was hast du erwartet. Zeige es (Frage bearbeiten, nicht im Kommentar hinzufügen). – Andreas

+0

Frage hat einen Link zu Screenshot mit dem Namen "Ausgabe. Und der Code ist sehr einfach. Was ich will, schrieb ich in der ersten Zeile" 1 MAIN INFO "muss protokolliert werden, aber nicht. – user6539479

+0

Die logging.properties können nur Logger konfigurieren, die angefordert werden namentlich im code.Zur Zeit haben Sie 2 Knoten, die die 'root <-com.mycompany.Main' und' root <-com.mycompany.LibClass' sind. Deklarieren Sie und stecken Sie eine 'com.mycompany' Logger und das wird einfügen ein gemeinsames Elternteil für beide Protokollierer – jmehrens

Antwort

0

Vielen Dank. Danke Andreas für die richtige Antwort.

Das Problem war hier:. Logger.getLogger (Main.class.getName()) ausführt, wenn Klasse vor Logger Lasten Konfiguration geladen wird LogManager.getLogManager() readConfiguration (fis).

Hier Lösung

package com.mycompany; 
public class Main { 
public static void main(String[] args) throws IOException { 
     FileInputStream fis = new FileInputStream("log.prop"); 
     LogManager.getLogManager().readConfiguration(fis); 
     MainClass mainClass = new MainClass(); 
    } 
} 

package com.mycompany; 
public class MainClass { 
    private final static Logger logger = Logger.getLogger(MainClass.class.getName()); 
    public MainClass() throws IOException { 
     logger.info("1 MAIN INFO"); 

     LibClass libClass = new LibClass(); 
     libClass.doWork(); 

     URL url = new URL("http://google.ru");//I don't want see 
     url.openStream(); // fine, finest logs from this code 

     logger.info("3 MAIN INFO"); 
    } 
} 

package com.mycompany; 
    public class LibClass { 
    private final static Logger logger = Logger.getLogger(LibClass.class.getName()); 
    public void doWork() { 
     System.out.println("doWork"); 
     logger.info("2 doWork INFO"); 
    } 
} 

handlers= java.util.logging.ConsoleHandler 
.level = OFF 
java.util.logging.ConsoleHandler.level = ALL 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 
com.mycompany.level = ALL 

Ausgabe

[Сб июл 02 04:32:11 EEST 2016] INFO: com.mycompany.MainClass <init> - 1 MAIN INFO 
doWork 
[Сб июл 02 04:32:11 EEST 2016] INFO: com.mycompany.LibClass doWork - 2 doWork INFO 
[Сб июл 02 04:32:12 EEST 2016] INFO: com.mycompany.MainClass <init> - 3 MAIN INFO