為了能夠實時記錄系統中發生的各種事件,sylixos加入了日誌管理功能。通過分析日誌檔案可以及時發現和處理系統執行過程中的問題。sylixos日誌子系統的主要功能是記錄系統發生的各個事件,根據不同使用場景可以選擇不同的日誌等級,來決定是否列印資訊,還可以設定日誌系統輸出的檔案集。
系統核心啟動時候會呼叫到_loginit函式,建立訊息佇列;呼叫函式api_partitioncreate建立記憶體分割槽,建立printk緩衝;同時建立日誌處理執行緒t_log,並初始化t_log執行緒。
t_log執行緒處理日誌系統中訊息的接收和傳送,執行流程如下:
呼叫函式api_msgqueuereceive從訊息佇列接收訊息;
判斷是任務中傳送,還是中斷中傳送,根據是否列印頭部的引數,選擇是否列印頭部資訊;
呼叫函式__logprintk或者__logprintf函式列印資料;
更新_g_ilogmsgslost值,即丟失的日誌訊息數量。
sylixos中會呼叫函式printk來實現日誌列印,函式執行過程如下:
解析輸入字串中的列印等級,如果有則設定解析值為列印級別,若沒有則設定為預設級別,即default_message_loglevel;
判斷列印級別,若大於console_loglevel則不列印資訊;
呼叫c庫函式vsnprintf向字串中列印自定義資料格式;
填充訊息結構體中其餘成員引數;
判斷log系統是否初始化,如果沒有初始化則呼叫函式__logbspmsg列印資訊;若初始化完成,則呼叫api_msgqueuesend函式向訊息佇列傳送訊息,傳送失敗則增加丟失訊息佇列計數值,即_g_ilogmsgslost值。
由函式執行過程可以看出,printk函式本質上是將需要列印的資料儲存到訊息中,以訊息佇列的方式傳送出去,由t_log執行緒接收訊息佇列中的訊息,執行列印資料的操作。
sylixos提供了相關shell命令供使用者使用。包括:logfiles命令用於顯示核心日誌列印檔案列表;logfileclear命令從核心日誌列印檔案表中清除指定的核心檔案描述符;logfileadd命令向核心日誌列印函式加入指定的核心檔案描述符;loglevel命令顯示或設定當前核心日誌(printk)列印等級。
根據以上shell命令,構建測試程式,演示printk函式向檔案描述符中輸出日誌資訊的使用方法。
構建簡單的測試程式,在應用層呼叫printk函式列印字串"hello sylixos!"。
#include
#include "system/loglib/loglib.h"
int main (int argc, char **argv)
printk("hello sylixos!\n");
return (0);
編譯測試程式並部署到mini2440虛擬機器上。
測試過程如圖 4.1所示。
圖 4.1 日誌系統使用演示
由測試用例可以看出,printk函式完成了向檔案中輸出列印資訊的操作。
採用同樣的方法也可以向telnet終端,串列埠終端等輸出列印資訊。
全息日誌子系統功能簡介
全息日誌子系統功能簡介 一 專案背景 隨著計算機和網路的飛速發展,資料庫已經不再僅僅是程式設計師所專有的話題。而oracle資料庫更是憑藉其效能卓越,操作方便靈活的特點,在資料庫市場中已經佔據了一席之地。但是同樣隨著網路技術的不斷進步,資料資訊的不斷增加,資料安全已經不再是以前的 老生長談 也更不是...
SylixOS中Proc檔案系統簡介
proc檔案系統是一種無儲存的檔案系統,當讀其中的檔案時,其內容動態生成,當寫檔案時,檔案所關聯的寫函式被呼叫。每個proc檔案都關聯特定的讀寫函式,因而它提供了另外的一種和核心通訊的機制 核心部件可以通過該檔案系統向使用者空間提供介面來提供查詢資訊 修改軟體行為,因而它是一種比較重要的特殊檔案系統...
Linux 系統日誌簡介
最近在做專案的時候剛好接觸到log,便查詢資料,補一點關於linux的基礎知識。日誌在排查檔案的時候至關重要。常用log下文件以及作用說明 1.var log boot.log 一般包含系統啟動時的日誌,包括自啟動的服務,錄了系統在引導過程中發生的事件,就是linux系統開機自檢過程顯示的資訊。2....