Mybatis中Logging模組的原始碼分析

2021-08-22 06:03:38 字數 1402 閱讀 3443

週末又來到了公司吹吹空調,順便記錄下mybatis的點點滴滴。

首先mybatis不定義日誌系統,完全依賴於第三方系統完成日誌記錄,利用介面卡模式完成實際操作,原始碼如下:

1:定義乙個log介面,具有如下方法:

public inte***ce log
2 :然後引入第三方日誌,比如***loggingimpl,實現log介面,然後用第三方的log去完成真實的動作,如下:

public class log4jimpl implements log 

@override

public boolean isdebugenabled()

@override

public boolean istraceenabled()

@override

public void error(string s, throwable e)

@override

public void error(string s)

@override

public void debug(string s)

@override

public void trace(string s)

@override

public void warn(string s)

這樣的實現類有jakartacommonsloggingimpl,jdk14loggingimpl,log4j2abstractloggerimpl,nologgingimpl,slf4jimpl,stdoutimpl等,那麼問題來了,這些實現類是如何被mybatis引用的呢?

3 面就是本文的重點logfactory,logfactory有個靜態的類變數,也就是真正完成日誌記錄類的構造方法,還有靜態**塊,其中完成的動作比較清晰,就是依次完成

例項化各個日誌類,如果系統包含對應的日誌模組,則反射例項化成功,然後將構造方法時設定為該類的構造方法,如果失敗的話,依次嘗試下乙個,直到最後無日誌記錄。

constructor<? extends log> logconstructor;

private static void setimplementation(class<? extends log> implclass)

logconstructor = candidate;

} catch (throwable t)

}static

});.......

logfactory有個靜態方法,獲得log的實現類,然後在專案中引用。

public static log getlog(string logger)  catch (throwable t) 

}

Python中logging的使用

我們先來看一下函式式簡單配置 預設情況下python的logging模組將日誌列印到了標準輸出中,且只顯示了大於等於warning級別的日誌,這說明預設的日誌級別設定為warning 日誌級別等級critical error warning info debug 預設的日誌格式為日誌級別 logge...

Django中的日誌logging

二 django日誌 python3有logging包,主要使用者記錄程式執行期間產生的全部日誌,統一分析。導包 詳細記錄從上到下依次降低 錯誤嚴重情況從上到下越來越嚴重 輸出日誌 handler 控制代碼 logging hander logging.filehandler test.log en...

python中的logging模組

一 python中的logging模組提供了日誌的介面,過它儲存各種格式的日誌 日誌的等級分為以下幾種,日誌的等級按照以下順序依次提高,debug info warning error critical 但是日誌的資訊量是依次減少的,當指定乙個日誌級別之後,會記錄大於或等於這個日誌級別的日誌資訊,小...