标签: adonetappender

无论如何都可以在log4net中以可编程方式刷新缓冲区

我正在使用log4net和AdoNetAppender.似乎AdoNetAppender有一个Flush方法.无论如何我可以从我的代码中调用它吗?

我正在尝试创建一个管理页面来查看数据库日志中的所有条目,我想用bufferSize = 100(或更多)设置log4net,然后我希望管理员能够单击管理员上的按钮页面强制log4net将缓冲的日志条目写入数据库(不关闭log4net).

那可能吗?

log4net buffer flush adonetappender

57
推荐指数
2
解决办法
2万
查看次数

log4net AdoNetAppender中的记录延迟了吗?

我有这样的AdoNetAppender设置:

  <log4net>
    <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
      <connectionStringName value="DefaultConnection" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
      <useTransactions value="false" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout" value="%thread" />
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout" value="%level" />
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType …
Run Code Online (Sandbox Code Playgroud)

c# log4net adonetappender asp.net-mvc-4

12
推荐指数
1
解决办法
7053
查看次数

如何在log4net ADONetAppender中使用存储过程?

我正在使用ADONetAppender(尝试)通过存储过程记录数据(这样我可以将逻辑注入日志记录例程).

我的配置设置如下所示.谁能说出我做错了什么?

<appender name="ADONetAppender_SqlServer" type="log4net.Appender.ADONetAppender">
  <bufferSize value="1" />
  <threshold value="ALL"/>
  <param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <param name="ConnectionString" value="<MyConnectionString>" />
  <param name="UseTransactions" value="False" />
  <commandText value="dbo.LogDetail_via_Log4Net" />
  <commandType value="StoredProcedure" />
      <parameter>
         <parameterName value="@AppLogID"/>
         <dbType value="String"/>
         <size value="50" />
         <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%property{LoggingSessionId}" />
         </layout>
      </parameter>
      <parameter>
         <parameterName value="@CreateUser"/>
         <dbType value="String"/>
         <size value="50" />
         <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%property{HttpUser}" />
         </layout>
      </parameter>
      <parameter>
         <parameterName value="@Message"/>
         <dbType value="String"/>
         <size value="8000" />
         <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
         </layout>
      </parameter>
      <parameter>
         <parameterName value="@LogLevel"/> …
Run Code Online (Sandbox Code Playgroud)

logging log4net adonetappender

9
推荐指数
2
解决办法
7880
查看次数

AdoNetAppender参数的默认值

我正在使用log4net和AdoNetAppender.它将所有日志信息记录到表中.该表实际上有2个整数列(可以为null).

这是我的log4net配置的相关部分:

<commandText value="INSERT INTO ActivityLog ([Date],[Thread],[Level],[Logger],[Message],[DealID]) 
                 VALUES (@log_date,@thread,@log_level,@logger,@message,@DealID)" />

 //other parameters hten DealID
<parameter>
      <parameterName value="@DealID" />
      <dbType value="Int32" />
       <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{DealID}" />
      </layout>
    </parameter>
Run Code Online (Sandbox Code Playgroud)

我发现的是,如果我没有明确设置使用类似的东西log4net.ThreadContext.Properties["DealID"] = DealID;会引发异常:

System.FormatException occurred
  Message="Failed to convert parameter value from a String to a Int32."
  Source="System.Data"
  StackTrace:
       at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
  InnerException: System.FormatException
       Message="Input string was not in a correct format."
       Source="mscorlib"
       StackTrace:
            at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
            at System.Number.ParseInt32(String s, NumberStyles …
Run Code Online (Sandbox Code Playgroud)

log4net adonetappender

9
推荐指数
1
解决办法
9953
查看次数

log4net AdoNetAppender - SqlParameterCollection不包含参数

在我的一个项目中,我收到此错误:

System.IndexOutOfRangeException: SqlParameterCollection does not contain SqlParameter with ParameterName "@log_date".
? System.Data.SqlClient.SqlParameterCollection.GetParameter(String parameterName)
? System.Data.Common.DbParameterCollection.System.Data.IDataParameterCollection.get_Item(String parameterName)
? log4net.Appender.AdoNetAppenderParameter.FormatValue(IDbCommand command, LoggingEvent loggingEvent)
? log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events)
? log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events)
Run Code Online (Sandbox Code Playgroud)

这是appender配置(在其他项目中完美运行):

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
        <bufferSize value="1" />
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <connectionString value="Data Source=*****;Initial Catalog=****;Integrated Security=SSPI" />
        <commandText value="INSERT INTO [LogsDB].[dbo].[Logs] ([Date],[Thread],[Level],[Logger],[Message],[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="@exception" /> …
Run Code Online (Sandbox Code Playgroud)

c# log4net adonetappender

9
推荐指数
1
解决办法
1465
查看次数

log4net到SQLServer:如果数据库不可用会发生什么?

我有一个写入SQL Server数据库的log4net ado appender.我喜欢它,我觉得它很整洁.在我将其发送到生产环境之前,我想知道如果数据库发生故障会导致什么行为.

我不希望应用程序停止,因为日志记录数据库不可用.我假设log4net会默默地失败并且什么都不做,至少那是我所希望的.任何人都可以确认这一点或(更好)指出一些证实这一点的文件吗?

log4net adonetappender

8
推荐指数
2
解决办法
3814
查看次数

使用log4net的AdoNetAppender时如何指定常量参数

http://logging.apache.org/log4net/release/config-examples.html

给出这里的日志表:

CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL,

    [Product] [varchar] 100 not null
)
Run Code Online (Sandbox Code Playgroud)

和appender配置在这里:

<appender name="AdoNetAppender" 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=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" />
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception], [Product]) VALUES (@log_date, …
Run Code Online (Sandbox Code Playgroud)

log4net adonetappender

8
推荐指数
1
解决办法
2637
查看次数

不支持.Net core 2.0中的log4net AdoNetAppender?

我执行log4net的AdoNetAppenderasp.net 2.0核心,但我想它是不支持.我已经在核心2.0中实现了log4net RollingFileAppender,它使用log4.net config成功运行.那么,如果log4net AdoNetAppender在核心2.0中不支持,有没有其他方法将日志插入到核心2.0中的sql数据库?

谢谢

c# adonetappender log4net-appender asp.net-core-2.0

6
推荐指数
2
解决办法
3623
查看次数

Log4Net在Dev机器上运行,在部署到共享主机时失败(使用相同的db/connstring)

我已在我的本地计算机上配置了log4net并正常工作,但是当我部署到我的主机(godaddy)时,它会无声地失败.我在我的开发机器和主机上使用相同的数据库/配置文件.我的log4net引用设置为copy local,而log4net.dll,.pdb和.xml存在于主机上的bin中.这是一个asp.net mvc应用程序.

编辑:没有抛出异常,应用程序按预期运行(减去日志记录)

这是在SQL Server 2005上运行的.nethost是IIS 7

我的配置的突出细节是:

<root>
  <level value="DEBUG" />
  <appender-ref ref="AdoNetAppender" />
</root>

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="1" />

  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Run Code Online (Sandbox Code Playgroud)

有人对要检查的事情有任何想法吗?

asp.net-mvc log4net sql-server-2005 adonetappender

4
推荐指数
1
解决办法
3516
查看次数

Log4NET,ADONetAppender和自定义字段

我可以使用ADONetAppender设置log4NET,当我想通过log.Info(消息)记录消息时捕获事物的状态时,一切正常.

因为我将根据在整个应用程序中更改的ActionID从我的应用程序中的各个位置进行日志记录,所以如何进行扩展以便我可以发出一个调用,例如log.Info(ActionID,message),其中ActionID最终为数据库?

c# asp.net-mvc log4net adonetappender

4
推荐指数
1
解决办法
4951
查看次数

log4net通过exception参数将完整堆栈跟踪添加到数据库表

对于log4net配置..这是我的参数设置

    <parameter>
      <parameterName value="@exception"/>
      <dbType value="String"/>
      <size value="8000"/>
      <layout type="log4net.Layout.ExceptionLayout"/>
    </parameter>
  </appender>
Run Code Online (Sandbox Code Playgroud)

我在ADONetAppender中的存储过程设置如下:

<commandText value="dbo.MyInsertProcName"/>
<commandType value="StoredProcedure"/>
Run Code Online (Sandbox Code Playgroud)

在proc中,@ exception的输入参数如下:

ALTER PROCEDURE [dbo].[MyInsertProcName]        
(    
    @log_date               DATETIME        
    , @log_level            VARCHAR(50)        
    , @logger               VARCHAR(255)        
    , @message              VARCHAR(4000)        
    , @exception            VARCHAR(MAX) 
....
Run Code Online (Sandbox Code Playgroud)

存储过程写入"MYTable"表,其"异常"列长度为VARCHAR 8000.

我能够创建"MYTable"的条目,但是在创建条目后,此条目不包含整个异常堆栈跟踪.看起来堆栈跟踪被截断,最多只包含1700个字符.

在log4net中将完整堆栈跟踪记录到数据库的最佳方法是什么?

我错过了什么?

请帮忙.

谢谢

c# asp.net log4net stored-procedures adonetappender

3
推荐指数
1
解决办法
5856
查看次数

log4net中的AdoNetAppender没有记录或抛出异常

我在log4net.config文件中定义了一个记录器,它应该使用AdoNetAppender登录到SQL Server 2005的一个实例.我的代码中正在调用记录器,但没有记录任何消息,也没有抛出任何异常.

以下是我的配置文件中定义记录器和appender的部分:

<logger name="Log4NetSummarySqlLogger">
  <level value="INFO"/>
  <appender-ref ref="SummarySqlAppender"/>
</logger>

<appender name="SummarySqlAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<!--<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=[removed];initial catalog=[removed];integrated security=false;persist security info=True;User ID=[removed];Password=[removed]" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[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> …
Run Code Online (Sandbox Code Playgroud)

log4net adonetappender

2
推荐指数
1
解决办法
8761
查看次数