標籤:
最近研究了一下Nlog這個日誌架構,這裡記錄一下如何將日誌寫到sqlite中。
第一步:使用NuGet擷取Nlog和Sqlite
- 第二步:在sqlite中建立一個database,這裡我用了SQLite Expert Personal視覺化檢視
第三步:在Nlog.config中配置target節點,這個在Nlog的官網中沒有尋找到相應的例子,但網上有一篇部落格有相應的記載,所以就先參考下:
<target name="Database" xsi:type="Database" keepConnection="false" useTransactions="false" dbProvider="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" connectionString="Data Source=d:log.db3;Version=3;" commandText="INSERT into Log(Timestamp, Loglevel, Logger, Callsite, Message) values(@Timestamp, @Loglevel, @Logger, @Callsite, @Message)"> <parameter name="@Timestamp" layout="${longdate}"/> <parameter name="@Loglevel" layout="${level:uppercase=true}"/> <parameter name="@Logger" layout="${logger}"/> <parameter name="@Callsite" layout="${callsite:filename=true}"/> <parameter name="@Message" layout="${message}"/> </target>
但這隻是參考,首先我們擷取的sqlite版本不是1.0.65.0,所以要修改dbProvider中的字串,這裡可以用ILSpay查看
到這裡基本上就差不多了,但最新的Nlog需要的配置中還要加上這一句:
commandType="Text"
所以最終的配置如下:
<targets> <!-- add your targets here --> <target name="File" xsi:type="File" fileName="C:Logfiles${shortdate}_nlog.txt"/> <target name="Database" xsi:type="Database" keepConnection="false" useTransactions="false" dbProvider="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.97.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" connectionString="Data Source=d:log.db3;Version=3;" commandType="Text" commandText="INSERT into Log(Timestamp, Loglevel, Logger, Callsite, Message) values(@Timestamp, @Loglevel, @Logger, @Callsite, @Message)"> <parameter name="@Timestamp" layout="${longdate}"/> <parameter name="@Loglevel" layout="${level:uppercase=true}"/> <parameter name="@Logger" layout="${logger}"/> <parameter name="@Callsite" layout="${callsite:filename=true}"/> <parameter name="@Message" layout="${message}"/> </target> <!-- <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" /> --> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="Database" /> </rules>
這樣我們就可以在代碼中直接使用Nlog記錄日誌了
Logger log = LogManager.GetCurrentClassLogger();LogManager.ThrowExceptions = true;log.Trace("test begin...");for (int i = 0; i < 5; i++){ Console.WriteLine(i); log.Debug(i.ToString());}log.Trace("test end...");Console.WriteLine("Press any key to close the application");Console.ReadKey();
最後我們再用SQLite Expert Personal查看下是否記錄成功:
Nlog 記錄日誌到 sqlite