導航:首頁 > 源碼編譯 > 日誌帶源碼

日誌帶源碼

發布時間:2024-11-15 07:16:22

❶ logback之Appender源碼解讀

在logback日誌框架中,每一個Logger都會去關聯一個Appender,Appender是真正把日誌內容輸出到控制台,文件等,可以說在日常應用中非常重要和拓展的一個組件。

其中最重要的就是 doAppend() 方法,每一個日誌事件輸出,都會調用到這個介面。

其中,有我們熟悉的 ConsoleAppender 和 FileAppender ,還有 RollingFileAppender 。另外,有一個很重要的 AsyncAppender 介面,非同步輸出,這也是logback日誌受歡迎的一個非常重要的特性。他們都繼承與抽象類 UnsynchronizedAppenderBase 類。

在 UnsynchronizedAppenderBase 中,我們看一下其中實現了最重要的一個方法 doAppend()

其實這個方法沒有東西也沒有做,只是使用模版方法,讓具體的子類交給子類的 append() 方法實現具體的邏輯。

在 OutputStreamAppender 類中,有幾個比較重要的成員變數。

其中 encoder 最主要的作用就是把日誌事件要輸出的內容變成位元組數組,然後把位元組數組寫入到 outputStream 。

其中 outputStream 可以是控制台或者文件等。

接著看 append() 方法

這個方法也是沒有做什麼,接著具體看 subAppend() 方法。

在這個方法中,可以看到 encoder 的作用,同時還有一個重要的方法 writeBytes()

這個方法就是把位元組數組寫入到outputStream中。

總結一下:一個日誌事件記錄的流程就是,要需要輸出的內容通過encoder變成位元組數組,然後寫入到具體的輸出流中。

ConsoleAppender 繼承了 OutputStreamAppender ,唯一不一樣的就是輸出的位置, ConsoleAppender 是輸出到控制台,outputStream輸出流也應該是控制台。

其中, start() 方法會在初始化logback.xml配置的時候去調用,在 start() 方法中就設置了outputStream輸出流——控制台。

FileAppender ,如果一個日誌事件需要輸出到文件中,那麼它就需要一個文件輸出流FileOutStream。

需要設置一個文件名。在看看 start() 方法對 FileAppender 進行初始化工作。

主要看 openFile() 方法

在這個方法中,通過文件名去 new File() 文件,然後封裝到 ResilientFileOutputStream 中,然後設置 setOutputStream() ,這樣子就可以把日誌輸出到文件中了。

非同步輸出,也就意味著會把日誌事件先放入到一個隊列中,然後由專門的線程去隊列中拿日誌事件消費。

看類 AsyncAppenderBase 中幾個重要的成員變數

AppenderAttachableImpl 裡麵包含一個Appender列表,列表是具體的Appender,如上面講到的ConsoleAppender和FileAppender。

BlockingQueue是一個隊列,Worker是一個消費線程。

例如,在配置文件中定義一個非同步的Appender

接下來看看具體是如何實現非同步輸出的。

start() 方法初始化中,定義了一個 ArrayBlockingQueue 隊列,以及啟動了一個worker線程。

接著看 append() 方法

在 append() 方法中,並沒有馬上處理日誌事件,而是調用 put() 方法

接著把日誌事件放進去消息隊列中。然後由 Worker 線程去處理

Worker 線程從隊列中take()取出事件,然後由具體的Appender去處理

看到調用 doAppend() ,已經和之前的Appender是一樣的啦。
本文是筆者個人的理解,若有不正確指出請多多糾正。

❷ element-plus源碼學習日誌-03

在element-plus的源碼探索系列中,今天的重點轉向了Dialog組件和Vue3的新特性。首先,我們來到element-plus\packages\dialog\src\index.vue,研究內置的teleport組件。

teleport是個強大的工具,它能讓原本作為子組件的DOM元素,通過to屬性的指定,直接定位到應用的同級節點,甚至body下。這對於解決層級問題,特別是實現全局彈層時,非常重要。在Vue2時代,我們曾用Vue.extend來創建並掛載在頂層的自定義組件,teleport簡化了這一過程。

接著,我們注意到vue3的自定義指令有所更新,涉及生命周期的變動。雖然具體細節還未詳盡理解,但官方文檔的說明有待後續深入研究。由於vue3支持fragments,組件不再受限於單一節點,這帶來了新的挑戰,目前暫存疑問。

在代碼部分,我們回顧了之前講解過的內容,通過實際例子,復習了相關知識。今天的收獲包括對teleport的深入理解,以及對新版本自定義指令的初步接觸。

最後,計劃在下篇中,我們將學習如何基於Jest為組件編寫單元測試,包括基本用法和測試報告的生成,這是框架開發中的關鍵步驟。

❸ qq空間日誌怎麼插入源代碼的視頻文件

日誌添加Flash(視頻):必須先找到視頻(Flash)的地址,復制以後,打開你的空間,編輯日誌,點擊寫日誌裡面Flash的標記f,就會出現一個對話框,把復制的地址粘貼到地址欄里,在自定義前面點一下,再填寬度還有高度,大約是700*500,再點擊下面的確定,然後瀏覽一下,可以放出就可以提交日誌了,記住視頻(Flash)最後的結尾一定要是swf,否則就放不出來了,你可以去試試。(好心態原創回答,請不要復制回答,謝謝!)

❹ 如何在android源代碼中列印出日誌

1:在編譯so文件的c或cpp文件之前中加入以下代碼,就可以在android中的log顯示日誌內容
#include
#define LOG_TAG "show infomation"
#define LOGW(a ) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a)
2:就可以在c或cpp中加入LOWG(str) 就可以在android中的log中顯示列印的內容
3.這樣寫完以後,如果直接編譯,就會報 __android_log_write 方法undefined.
怎麼回事呢?關鍵是在設置編譯選項上面。
在Android.mk文件里,可以指定一個LOCAL_LDLIBS的參數。如果不指定,那麼編譯的時候,只會引入默認的幾個重要的lib,比如libc之類的。
如果要用log,那就要把 liblog給引進來。
網上很多的寫法是 LOCAL_LDLIBS := -llog ,這在build static lib的時候沒什麼問題。如果是build shared lib,就會報個 cannot find -llog的錯誤。意思是找不到liblog.so這個庫文件。
因此需要改成 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 才可以正常編譯。
其中-L參數是指定了搜索lib的路徑。
下面是一個android.mk的內容的例子:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestNdkNetwork
LOCAL_SRC_FILES := HttpConnection.cpp
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)

閱讀全文

與日誌帶源碼相關的資料

熱點內容
android數據共享方式 瀏覽:373
編譯環境控制台 瀏覽:618
寧波欣達壓縮機空氣過濾器價位 瀏覽:663
冪函數的運演算法則總結 瀏覽:138
方舟自己的伺服器怎麼搞藍圖 瀏覽:915
校園網怎麼加密ip 瀏覽:786
kotlin可以編譯雙端嗎 瀏覽:327
哪個幼兒識字app不要錢 瀏覽:802
壓縮軟體的作用 瀏覽:31
猴子網游app安全嗎怎麼掃碼 瀏覽:221
哪些系統盤文件夾大 瀏覽:341
pdf朗讀軟體手機 瀏覽:225
ug編程實例教程 瀏覽:987
cad輸入命令時滑鼠卡頓 瀏覽:795
php過濾文件 瀏覽:757
linux配置ip命令 瀏覽:903
命令的英文怎麼讀 瀏覽:353
哪個app是自己彈音樂的 瀏覽:655
安卓變是什麼意思 瀏覽:612
qq五子棋在哪裡找app 瀏覽:837