分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
標題 | 主題 |
---|---|
第一部分 | 一、建立網站 - Nlog 設定 + SQLite的Sql撰寫 |
第二部分 | 二、網站的C# 程式 |
第三部分 | 三、參考文獻與資料備註 |
STEP 1: 開啟Visual Studio (本篇使用2015) -> Asp.net應用程式 -> 輸入名稱 -> 確定
STEP 2: 對專案的參考 -> 滑鼠右鍵 -> 選擇管理NuGet套件
STEP 3: 安裝SQLite ,如下畫面,請選擇System.Data.SqLite
STEP 4: 安裝時會將其他的項目一併安裝 -> 請選擇確定
STEP 5: 再接著安裝NLog ,如下畫面
STEP 6: 再接著安裝 NLog.Config ,安裝了這個就不用自己全部重刻一次設定檔。
STEP 7: 安裝完成後,我們的專案就多了NLog.config的設定檔,請打開他
STEP 8: NLog.config這篇我們只會應用到
區塊 | 說明 |
---|---|
targets 區塊 | Log紀錄的方式、寫入的位置 |
rules 區塊 | 何種Log等級才要記錄 => 順序: Debug < Info <Warm <Error = Fatal |
STEP 9: 請在rules 區塊內貼上以下代碼 ,如下圖顯示,當發生至少要大於warn等級的資料才進行寫入
<logger name="*" minlevel="warn" writeTo="Database_SQLite" />
STEP 10-1: 請在targets 將SQLite3 的代碼插入,如下圖
<target xsi:type="Database" name="Database_SQLite" keepConnection="false" useTransactions="false">
<dbProvider>
System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.105.2, Culture=neutral, PublicKeyToken=db937bc2d44ff139
</dbProvider>
<connectionString>
data source=|DataDirectory|NLog_Record.s3db;
</connectionString>
<commandText>
CREATE TABLE IF NOT EXISTS NLog_Record_${date:format=yyyyMMdd} (sequence_id INTEGER PRIMARY KEY AUTOINCREMENT
UNIQUE
NOT NULL,
time_stamp DATETIME NOT NULL,
level TEXT NOT NULL,
host TEXT NOT NULL,
url TEXT NOT NULL,
type TEXT NOT NULL,
source TEXT NOT NULL,
logger TEXT NOT NULL,
message TEXT NOT NULL,
stacktrace TEXT NOT NULL,
detail TEXT NOT NULL);
insert into NLog_Record_${date:format=yyyyMMdd} (time_stamp, level, host, url, type, source, logger, message, stacktrace, Detail)
Values(@time_stamp, @level, @host, @url, @type, @source, @logger, @message, @stacktrace, @detail);
</commandText>
<parameter name="@time_stamp" layout="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}" />
<parameter name="@level" layout="${level}" />
<parameter name="@host" layout="${machinename}" />
<parameter name="@url" layout="${callsite}" />
<parameter name="@type" layout="${exception:format=type}" />
<parameter name="@source" layout="${callsite:className=true}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@message" layout="${message}" />
<parameter name="@stacktrace" layout="${exception:stacktrace}" />
<parameter name="@detail" layout="${exception:format=tostring}" />
STEP 10-2: 以下分成4大區塊,解釋說明各執行的工作
區塊 | 說明 |
---|---|
dbProvider區塊 | 使用的Sqlite的package版本 ※可參考Step10-3 |
connectionString區塊 | 紀錄資料的位置 【DataDirector】 =>表示網站的App_Data目錄 NLog_Record.s3db => 表示紀錄於哪個檔案中 |
CommanText區塊 | 紀錄資料的位置 【DataDirector】 =>表示網站的App_Data目錄 Insert 部分:如果已經有產生當天的資料表,則將目前的紀錄寫入 |
Parameter區塊 | 與CommanText 欄位呼應,將資料依照Nlog 提供的參數寫入,可參考第三部分 |
STEP 10-3: 點開專案的 pcakage.config ,可以找到對應的SQLite 版本資訊
STEP 1: 為了讓網站啟動的時候會自動建立SQLite資料庫,請先回到專案 -> Global.asax ->Global.asax.cs
STEP 2: 撰寫啟動時的執行SQLite3的函式,如下圖:
private void SqliteDBInitinal()
{
//建立DB
try
{
//Sqlite3DB的建立路徑 - Nlog的路徑
var nlogSqlitePath = HttpContext.Current.Server.MapPath("~/App_Data/NLog_Record.s3db");
//
SQLiteConnection.CreateFile(nlogSqlitePath);
}
catch (Exception ex)//當發生錯誤時
{
//使用Nlog內建的Error Exception紀錄
LogManager.GetLogger("MyNlog").ErrorException("建立.s3db時發生例外", ex);
}
}
STEP 3: 啟動我們的網站 ,可以看到專案的 App_data底下自動建立 NLog_Record.s3db 檔案
但也可以發現,因為目前沒有記錄任何資料所以大小為0
STEP 4: HomeController.cs -> 寫入以下程式碼 ,當開啟網站時,會發生 1. Info事件 (※記錄好人一生平安的資訊) 2.接著會跳到Exception
public ActionResult Index()
{
try
{
LogManager.GetLogger("Action Index").Info("好人一生平安");
//以下故意將型別設成Null 再塞值,造成Exception
List<object> testObject = new List<object>();
testObject = null;
testObject.Add(null);
}
catch (Exception ex)
{
LogManager.GetLogger("Action Index").ErrorException("Title:測試發生錯誤", ex);
}
return View();
}
STEP 5: 請先安裝 Sqlite 瀏覽工具 ,這邊推薦 SqliteStudio ,有多國語言
https://sqlitestudio.pl/index.rvt
STEP 6: 使用工具開啟NLog_Record.s3db,以下是畫面,請選擇OK即可
STEP 7: 可以看到我們資料表名稱 & 欄位資訊
STEP 8: 選擇數據 -> 可以發現只有一筆 Error紀錄 ,這是因為Info 的級別 小於 warn,所以不會顯示。
STEP 9: 將Nlog.config 的 minLevel 改為 Debug ,如下圖 -> 然後在運行一次網站
STEP 10: 此時就可以看到 Info 的資訊也記錄在 Sqlite3 的Log 紀錄中 。 我們完成Log紀錄模組化的功能了~
區塊 | 內容 |
---|---|
Nlog 的參數設定 | 參考連結 |
檔案提供下載 | Github Soruce Code |
DevOps講義下載 | 今天剛好參加2017年的DevOps,以下圖片是擷取講師的ptt 圖片 (※這位講師講得很讚,ptt是開放式下載的,如果有需要可以到https://devopsdays.tw/agenda.html下載) |
補充結語 | 讓Log 紀錄整理清晰就如投影片的重點提示,如果是長遠運行的系統而非拋棄式的系統 能有完整的紀錄可以增加穩定性,在持續完整架構後,最好的回饋是在系統發生問題前可以反饋我們資訊。 |