簡體   English   中英

什么是Java中的“logger”?

[英]What is “logger” in Java?

我有一節課,其中我看到以下內容:

this.logger.severe("");
this.logger.warning("");
this.logger.info("");

我不明白幾件事:

  1. 我們如何使用之前未定義的方法? 我的意思是,課堂上沒有定義“記錄器”方法。 我認為可以定義這些方法,因為所考慮的類是另一個定義了“logger”的類的擴展。 但是在類的定義中沒有“擴展”語句(只有“實現”)。

  2. 我可以理解這樣的事情:“objectName.methodName”。 但那是什么“objectName.something1.something2”? “something1.something2”是方法的名稱? 方法名稱可以包含點嗎?

  3. 究竟這些“記錄器。*”到底是什么? 我認為他們保存了有關代碼執行的信息。 他們寫了關於執行期間發生的事情的報告。 但在哪里可以找到這些信息?

添加:

在文件的開頭我有: import java.util.logging.Logger;
然后在我的類中: private Logger logger = Logger.getLogger("abcd") ;
所以,logger是Logger類的一個對象(但是我不明白為什么他們不能使用“new Logger()”以通常的方式實例化類。我也不明白logger.severe(“”)到底是做什么的。

記錄器沒有任何特殊之處。 這只是Java代碼。

public class SomeClass {
    private Logger logger = LogFactory.getLogger(SomeClass.class);

    public void doSomething() {
        this.logger.debug("foo");
    }
}

this.logger只指向當前實例的名為logger的實例變量( this )。 this. 在這個例子中,前綴是超級豐富的。 也可以在這里做logger.debug("foo")

如果它沒有在SomeClass本身中聲明,那么它可能已在擴展類中聲明。 檢查在extends聲明的類。

至於你的objectName.something1.something2疑問,你已經看過System.out.println()如何工作? System.out返回一個PrintStream對象,該對象又有一個println()方法。 因此,如果objectName.something返回fullworthy Object與方法,那么你可以繼續鏈接方法調用。

基本上,

objectName.something1.something2;

可翻譯為

SomeObject someObject = objectName.something1;
someObject.something2;

但是如果你在代碼中的任何其他位置都不需要someObject ,那么它可以像你的例子一樣縮短。

更新 :根據您的更新:

所以,logger是Logger類的一個對象(但是我不明白為什么他們不能使用“new Logger()”以通常的方式實例化類。我也不明白logger.severe(“”)到底是做什么的。

只需閱讀相關課程的javadoc即可 至於為什么它不能被實例化,這是因為工廠模式

更新2 :根據另一個混淆:

我不明白為什么他們使用“這個”。 我的意思是,如果我只使用字段名稱,默認情況下它不會是該對象的字段嗎? 我在“this.x”和“x”之間有什么區別嗎?

通過這種方式,您可以更明確地了解您要訪問的是哪一個。 如果該方法包含例如參數或具有名稱logger的局部變量,則this.logger仍將引用實例變量。

public class SomeClass {
    private Logger logger = LogFactory.getLogger(SomeClass.class);

    public void doSomething(Logger logger) {
        this.logger.debug("foo"); // Refers to the instance variable.
        logger.debug("foo"); // Refers to the method argument.
    }

    public void doSomethingElse() {
        Logger logger = LogFactory.getLogger(SomeClass.class);
        this.logger.debug("foo"); // Refers to the instance variable.
        logger.debug("foo"); // Refers to the method local variable.
    }
}
  1. 'logger'將是另一個對象,而不是方法。 此logger類將在其上定義方法,如public void severe(String message)

  2. 'something1'將是'objectName'包含的對象。 例如, Car.Engine.Cylinder.Fire() ,使用一種方法像這樣觸發汽車的氣缸被認為是不好的做法,你應該做更像Car.StartEngine() 的事情 (更多信息請參見demeter定律 Car.StartEngine()

  3. 記錄器將記錄程序中發生的情況,因此如果發生崩潰或后來發生錯誤,您可以看到發生了什么。 無論是記錄到文本文件還是記錄到某個數據庫,都將記錄到記錄器的實現中。

  1. 記錄器通常是指log4j中類的用法。
  2. 記錄器是一個成員對象,其功能如嚴重被稱為。
  3. 記錄器通常會記錄到一個文件中(這可以通過log4j.xml或其他配置文件或在程序啟動期間配置)。

編輯:更改了log4j鏈接。

logger不是一個方法,而是一個類變量,它似乎是一個暴露方法“嚴重”,“警告”和“信息”的對象。

檢查你的課程,例如“someClass logger = new someClass();”

java.util.Logger類是Java日志API的主要訪問點。 以下是創建記錄器的方法:

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

作為參數傳遞給getLogger()工廠方法的字符串是要創建的Logger的名稱。 您可以自由選擇名稱,但名稱表示Logger在Logger層次結構中的位置。 每一個。 名稱中的(點)被解釋為層次結構中的分支。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM