Log4Net 在错误后未登录数据库,它如何登录文件

桑迪普多巴里亚

我有一个奇怪的问题正在进入 log4net。我已经使用 AdoDotNet appender 启用了 log4net。它通常工作正常并登录数据库,但有时它突然停止工作而不登录数据库。但是当我们将级别信息从 info 更改为 debug 并再次调试为 info 然后它开始工作并登录到数据库。我做了进一步的研究并启用了 log4net 内部调试,并且还并行添加了 RollingFileAppenderInfoErrorLogger appender 以跟踪问题是来自 AdonetAppender 还是来自 log4net 一般。

所以现在当这个问题在 log4net 内部调试中发生时,它会抛出错误并停止登录数据库,直到并且除非我更改 log4net 配置中的某些内容但它继续登录到文件附加程序
这个错误是传输错误所以我的问题是为什么 log4net 不是在一些异常之后开始但仍然登录到文件?我们如何在这种异常之后重新启动数据库日志记录。

log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Failed in DoAppend
System.Data.SqlClient.SqlException (0x80131904): A transport-level error has occurred when sending the request to the server. (provider: Named Pipes Provider, error: 0 - The specified network name is no longer available.) ---> System.ComponentModel.Win32Exception (0x80004005): The specified network name is no longer available
   at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc, Boolean sync, TaskCompletionSource`1 completion, Int32 startRpc, Int32 startParam)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events)
   at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events)
   at log4net.Appender.BufferingAppenderSkeleton.Append(LoggingEvent loggingEvent)
   at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent)
ClientConnectionId:a1efe1ac-6986-4a15-a233-7dcfee4ef60e
Error Number:64,State:0,Class:20

下面是我的 log4net 配置文件。

<?xml version="1.0"?>
<configuration>
    <log4net debug="true">
        <appender name="DebugAppender" type="log4net.Appender.DebugAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%-4timestamp [%thread] %-5level %logger - %message%newline"/>
            </layout>
        </appender>
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%-4timestamp [%thread] %-5level %logger - %message%newline"/>
            </layout>
        </appender>
<appender name="RollingFileAppenderInfoErrorLogger" type="log4net.Appender.RollingFileAppender">
     <file value="D:\Halo\Logs\LoaderService.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10240KB" />
    <staticLogFileName value="true" />
    <countDirection value="1"/>
    <threshold value="INFO"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level %logger - %message%newline%newline" />
    </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO"/>
      <param name="LevelMax" value="Error"/>
    </filter>
    </appender>
        <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
            <bufferSize value="1"/>
            <usetransactions value="false"/>
            <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
            <connectionStringName value="HaloAutomationLog"/>
            <commandText value="INSERT INTO [HaloAMS].[Logging].[ApplicationLog] ([LogDate],[Thread],[LogLevel],[Logger],[LogMessage],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"/>
            <parameter>
                <parameterName value="@log_date"/>
                <dbType value="DateTime"/>
                <layout type="log4net.Layout.RawTimeStampLayout"/>
            </parameter>
            <parameter>
                <parameterName value="@thread"/>
                <dbType value="String"/>
                <size value="255"/>
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%thread"/>
                </layout>
            </parameter>
            <parameter>
                <parameterName value="@log_level"/>
                <dbType value="String"/>
                <size value="50"/>
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%level"/>
                </layout>
            </parameter>
            <parameter>
                <parameterName value="@logger"/>
                <dbType value="String"/>
                <size value="255"/>
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%logger"/>
                </layout>
            </parameter>
            <parameter>
                <parameterName value="@message"/>
                <dbType value="String"/>
                <size value="-1"/>
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%message"/>
                </layout>
            </parameter>
            <parameter>
                <parameterName value="@exception"/>
                <dbType value="String"/>
                <size value="2000"/>
                <layout type="log4net.Layout.ExceptionLayout"/>
            </parameter>
        </appender>
        <root>
            <level value="INFO" />      
            <appender-ref ref="RollingFileAppenderInfoErrorLogger" />   
        <appender-ref ref="AdoNetAppender"/>
        </root>
    </log4net>
</configuration>
彼得

你可以加

<reconnectonerror value="True" />

到您的 appender 配置或添加:

ConnectRetryCount=X; //where x is the times you want to reconnection

到您的连接字符串

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Log4net不登录到数据库

来自分类Dev

log4net到类库

来自分类Dev

Log4Net不会从类库登录

来自分类Dev

发生 log4net 错误

来自分类Dev

Log4Net写入不同的文件

来自分类Dev

log4net未将异常记录到数据库,未显示任何错误

来自分类Dev

使用log4net登录到Oracle数据库不会立即更新数据库

来自分类Dev

使用log4net登录到Oracle数据库不会立即更新数据库

来自分类Dev

Log4Net错误:“无法找到配置节log4net” AdoNetAppender

来自分类Dev

使用log4net的adonetappender登录到redshift

来自分类Dev

如何知道log4net是否记录了错误

来自分类Dev

如何在Windows应用程序中使用Log4net登录文件

来自分类Dev

如何在Windows应用程序中使用Log4net登录文件

来自分类Dev

如何下载从log4Net生成的日志文件

来自分类Dev

如何下载从log4Net生成的日志文件

来自分类Dev

如何阻止Log4Net创建空日志文件

来自分类Dev

使用log4net作为类库?

来自分类Dev

IIS中托管的WCF服务库的log4net

来自分类Dev

log4net写入文件可以,但是无法插入数据库

来自分类Dev

log4net的文件和数据库多个配置

来自分类Dev

为什么Log4Net不写错误日志?

来自分类Dev

Log4Net记录错误仅一次

来自分类Dev

log4net:错误无法创建 appender [RollingLogFileAppender]

来自分类Dev

防止Log4Net写入所有日志文件

来自分类Dev

Log4net滚动文件名

来自分类Dev

Log4Net不写入输出文件

来自分类Dev

log4net创建并用重复的文本填充文件

来自分类Dev

使用FileSystemWatcher观看log4net日志文件

来自分类Dev

Log4net不创建日志文件