Fork me on GitHub

使用Sqlite和log4net记录日志

我已经有一篇文章专门记录详细的说明了在winform上的使用log4net记录日志的配置和相关的代码及测试。

但是在实际应用过程当中经常需要记录日志到数据库当中。我这边就补充说明一下怎么使用Sqlite保存日志。

其实一旦实现了Sqlite其他的数据库的记录方式也就比较清晰了。

首先要在配置文件当中添加一个Appender

<appender name="dblog" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="2"/>
      <!-- 通过sqlite记录日志 -->
      <connectionType value="System.Data.SQLite.SQLiteConnection,System.Data.SQLite,Version=1.0.113.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139"/>
      <connectionString value="Data Source=log.db"/>
      <commandText value="INSERT INTO Log (Date, Level, Logger, Message, StackTrace) VALUES (@Date, @Level, @Logger, @Message, @StackTrace)"/>
      <parameter>
        <parameterName value="@Date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.RawTimeStampLayout"/>
      </parameter>
      <parameter>
        <parameterName value="@Level"/>
        <dbType value="String"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Logger"/>
        <dbType value="String"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@Message"/>
        <dbType value="String"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@StackTrace"/>
        <dbType value="String"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%stacktrace"/>
        </layout>
      </parameter>

    </appender>

然后在root区域进行注册

 

 一般网上找到的表里面没有StackTrace字段,这个是我再测试的时候自己添加的字段。

随便找个可以管理Sqlite的小工具,然后创建一个数据

在数据库当中创建一个表:

CREATE TABLE Log  (
    LogId        INTEGER PRIMARY KEY,
    Date        DATETIME NOT NULL,
    Level        VARCHAR(50) NOT NULL,
    Logger        VARCHAR(255) NOT NULL,
    Message        TEXT DEFAULT NULL,
    StackTrace TEXT DEFAULT NULL
);

最后把这个数据库文件(我这里就叫log.db)保存在程序目录当中,当然具体的目录可以在Appender当中的connectionString上自定义:

 

 

当中的 connectionType 当中需要把用到的包和类及相应的版本核对清楚。

然后在网上下载两个文件 System.Data.SQLite.dll和SQLite.Interop.dll

并且在程序当中引入System.Data.SQLite.dll。

SQLite.Interop.dll文件就比较迷惑了,我试着导入了几次都导入不了:

 

所以在使用时就把这个文件放在了程序包的位置:

 

 

 完成以上步骤就可以实现了通过数据库记录日志。

具体的测试结果如下:

 

posted @ 2021-03-04 14:44  太阳出来遇到大海  阅读(611)  评论(0)    收藏  举报