Nlog 记录日志到 sqlite
最近研究了一下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查看下是否记录成功:
标签:
LOG
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异