关闭单个 log4net 实例

Shutting down a single log4net instance

我的 log4net 配置中有多个附加程序,一个用于记录文件,另一个使用存储过程。我可以看到记录到文件中,但是 SQL 数据只有在我单击 "Stop Site" 后才会显示,请参见下图:

所以我得出的结论是,我可能必须通过执行以下操作来 'shutdown' 实例:log4net.LogManager.GetLogger("SearchParamsLogger").Logger.Repository.Shutdown();

但这样做似乎也关闭了另一个记录器。 如何只关闭一个记录器?

我有以下 logger 个块:

<logger name="SearchParamsLogger">
  <level value="DEBUG" />
  <appender-ref ref="LogSearchParams" />
</logger>
<logger name="FileLogger">
  <level value="DEBUG" />
  <appender-ref ref="LogFile" />
</logger>

我的 .config 中有以下附加程序:

<appender name="LogSearchParams" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="100" />
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="data source=MyServer\SQLEXPRESSPC;initial catalog=MyDatabase;integrated security=false;persist security info=True;User ID=DBUser;Password=MyPassword" />
  <commandText value="InsertIManNrlLog" />
  <commandType value="StoredProcedure" />
  <parameter>
    <parameterName value="@UserName"/>
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{uname}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@ObjectId" />
    <dbType value="String" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@DeleteSpan" />
    <dbType value="Int32" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{deleteSpan}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@LogLevel" />
    <dbType value="String" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>
</appender>
<appender name="LogFile" type="log4net.Appender.FileAppender">
  <file value="application.log"/>
  <appendToFile value="true"/>
  <layout type="log4net.Layout.PatternLayout">
    <header value="Logging Start &#xD;&#xA;"/>
    <footer value="Logging End &#xD;&#xA;"/>
    <conversionPattern value="%date | [%thread] %-5level %logger: %message%newline"/>
  </layout>
</appender>

您可以配置 DBAppender 在将它们刷新到数据库之前 buffer 的消息数。

你的 <bufferSize value="100" /> 是我发现的默认示例 here,降低它你应该更频繁地看到消息,你甚至可以立即将值 1(或更低)记录到数据库)