2014-11-03 60 views
0

我在Java中很新,但我必須編寫一個簡單的記錄器。 我的問題是我的記錄器不會傳輸它的處理程序。記錄器處理程序不會在不同的類中工作java

我第一類是:

public class LoggerClass { 
    static final Logger logger = Logger.getLogger("myLogger"); 

    FileHandler fh; 
     public LoggerClass() { 
     try { 
      this.fh = new FileHandler("C:/Users/Administrator/Desktop/Logging%u.txt"); 
     } catch (IOException | SecurityException ex) { 
      Logger.getLogger(LoggerClass.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     logger.addHandler(fh); 
     SimpleFormatter formatter = new SimpleFormatter(); 
     fh.setFormatter(formatter); 

    } 

} 

,我想通過這樣的記錄轉移到另一個類:

package Logger; 
import static Logger.LoggerClass.logger; 
import java.io.IOException; 
import java.util.logging.Level; 

public class LoggingTest { 

    public static void main(String[] args) throws IOException { 

     try 
    { 
     ((Object) null).toString(); 
    } 
    catch (Exception e) 
    { 
     logger.log(Level.SEVERE, "oh oh", e); 
    } 

    logger.info("Hat funktioniert"); 
    } 
    } 

我想幾乎所有我發現,並記錄器功能但它只在控制檯上給出它的輸出,而不是它應該如何在文件中

+0

請注意,您有幾件事情是錯誤的 - 在類之間共享記錄器實例並在不是例如時調用您的類接口。記錄器通常應該使用外部配置進行配置,通常是靜態配置文件:.xml或.properties。 – eis 2014-11-03 12:50:44

+0

我很抱歉「LoggerInterface」的事情,它是從以前的嘗試。 – 2014-11-03 13:15:55

回答

0

在你測試你從來沒有配置你的記錄。試試這個:

package Logger; 
    import static Logger.LoggerClass.logger; 
    import java.io.IOException; 
    import java.util.logging.Level; 

    //There are better ways to do this. 
    static { 
     new LoggerClass(); 
    } 

    public class LoggingTest { 



    public static void main(String[] args) throws IOException { 

     try 
    { 
     ((Object) null).toString(); 
    } 
    catch (Exception e) 
    { 
     logger.log(Level.SEVERE, "oh oh", e); 
    } 

    logger.info("Hat funktioniert"); 
    } 
    } 
0

更改此項:

static final Logger logger = Logger.getLogger("myLogger"); 

public static final Logger logger = Logger.getLogger("myLogger"); 

原因,你給了它在您定義記錄器和使用defail訪問你只能訪問它在你的包一類的默認訪問。當你使用的是你有另一個包,因此錯誤。

除了上述形式使用日誌如:

LoggerInterface.logger.info("Hat funktioniert"); 

既然你將它定義靜態的,所以使用classname.instance.method(參數)