5

有谁知道如何设置 log4net 以使用 system.data.sqlite 提供程序的一个很好的例子?

我最近一直在玩它,我认为我已经完成了所有工作。它成功连接到数据库并将其“写”出。但是,当我查看表数据时,它实际上从未提交日志。

4

2 回答 2

12

确保您设置了以下引用:

  • log4net(显然)
  • System.Data.SQLite(你可能会忘记这个)

在 Visual Studio 中关闭项目并在文本编辑器中重新打开 .csproject(或 VB 等效项目),然后查找参考部分。我的看起来像这样:

<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\externals\log4net-1.2.10\bin\net\2.0\release\log4net.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\externals\sqlite.net\System.Data.SQLite.dll</HintPath>
</Reference>

请注意 SQLite 的参考。在这种情况下,您需要以下文本:System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139这是承载 ADO.net 兼容 sql 连接类的程序集的全名,这实际上是 log4net 所依赖的。

在 Visual Studio 中重新打开您的项目,确保您有 .config 文件并在 XML 文本编辑器中打开它。在这里粘贴我的配置文件比解释所有内容要容易得多。请注意,您将在此处使用程序集名称。

将其放在 configSections XML 节点中:

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

作为配置的直接 XML 子节点,放置这个 XML 部分:

<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
        </layout>
    </appender>
    <appender name="sqlite" type="log4net.Appender.AdoNetAppender">
        <bufferSize value="100" />
        <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        <connectionString value="Data Source=log4net.db;Version=3;" />
        <commandText value="INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)" />
        <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>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="sqlite" />
    </root>
</log4net>

作为最后一步,您必须确保您指定的 sqlite db 文件预先存在于指定位置。一种方法是创建数据库并将其作为要复制到输出文件夹的资源附加。确保它与您指定的名称相同(在这种情况下log4net.db

于 2009-09-02T18:32:39.257 回答
0

我今天也在搜索同样的东西,发现http://sqlite.phxsoftware.com/forums/t/1667.aspx

这是一个成功使用 System.Data.SQLite ADO 提供者的示例配置(而不是官方 apache 文档中记录的另一个)。

希望它能引导你朝着正确的方向前进。

于 2009-04-16T18:58:58.530 回答