标签: log4net-appender

不支持.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
查看次数

日志不会保存到Logs表中

我正在尝试将我从应用程序收到的任何日志保存到我的数据库中的日志表中,到目前为止,没有任何东西得到保存.我正在使用Log4net和AdoNetAppender将日志保存到SQL Server中的表中.此代码位于我的应用程序服务器端的Web API项目中.

我按如下方式设置日志:

1)在我的Web.Config中设置XML:

<log4net>
    <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=token" />
      <connectionString value="data source=db;Initial Catalog=dbname;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
      <commandText value="dbo.procLogs_Insert" />
      <commandType value="StoredProcedure" />
      <parameter>
        <parameterName value="@log_timestamp" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@log_recordNum" />
        <dbType value="Int32" />
        <size value="32" />
        <layout type="log4net.Layout.RawPropertyLayout" />
      </parameter>
      <parameter>
        <parameterName value="@log_computerName" />
        <dbType value="String" />
        <size value="128" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%X{machine}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_processTimeStamp" />
        <dbType value="DateTime" /> …
Run Code Online (Sandbox Code Playgroud)

c# sql-server log4net log4net-appender asp.net-web-api

6
推荐指数
1
解决办法
407
查看次数

试图让 log4net 与 PowerShell 一起工作(混合使用 log4net 配置文件)

我一直在努力让 log4net 与 PowerShell 一起工作。我有以下 PowerShell 代码,它使用配置文件拉入 log4net,然后尝试创建一个简单的日志文件条目,但出现错误。

Clear-History
Clear-Host
#
Write-Host "BEGIN: Importing module psm_logger.psm1"
Import-Module "C:\Users\Administrator\Desktop\ps\IIS\psm_logger.psm1" -Force
Write-Host "BEGIN: log4net configuration definition"
$log = New-Logger -Configuration "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.config" -Dll "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.dll"
Write-Host "END: log4net configuration definition"
Write-Host "BEGIN: log4net configuration DEBUG definition"
#$log.DebugFormat("Logger configuration file is : '{0}'", (Resolve-Path "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.config"))
Write-Host "END: log4net DEBUG configuration definition"
#======================
$ThisHostname = $env:COMPUTERNAME
#======================
Write-Host "BEGIN: Module/Snapin import/addition"
Write-Host ""
$log.Info("BEGIN: Module/Snapin import/addition")
#======================
Run Code Online (Sandbox Code Playgroud)

上面引用的 psm_logger.psm1 文件包含:

function New-Logger
{
#Write-Host "BEGIN: New-Logger" …
Run Code Online (Sandbox Code Playgroud)

powershell log4net log4net-configuration log4net-appender

5
推荐指数
1
解决办法
8174
查看次数

如何防止Log4Net截断异常?

我正在将Log4Net事件插入SQL数据库.Message和Exception字段都是8000个字符,但偶尔会有一个超过8000个字符的事件,并且数据会被截断.

是否有任何可配置的方法来将事件分成多行?如果没有,我正在考虑实现我自己的ILog,它自动处理日志记录事件的分块,所以我没有得到任何截断的数据.有没有人有更好的主意?

编辑 - 记录配置/数据库列定义

这是我当前的参数配置:

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

数据库表定义如下:

[Message] [nvarchar](max) NULL,
[Exeception] [ntext] NULL,
Run Code Online (Sandbox Code Playgroud)

c# logging log4net log4net-configuration log4net-appender

5
推荐指数
1
解决办法
912
查看次数

log4net - 获取特定于一个记录器的附加程序

我正在寻找一种方法将所有附加程序附加到一个记录器实例。

我试过:

Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
hierarchy.GetAppenders()
Run Code Online (Sandbox Code Playgroud)

根据文档,这将返回当前配置的所有记录器的所有附加程序。

当我尝试这个时:

LogManager.GetLogger("MyLoggerName").Logger.Repository.GetAppenders();
Run Code Online (Sandbox Code Playgroud)

我得到相同的结果。

我只想检索附加到一个记录器的附加程序(在这种情况下为“MyLoggerName”)

我哪里错了?

logging log4net log4net-appender

5
推荐指数
1
解决办法
3410
查看次数

Log4net preserveLogFileNameExtension not working

this is my log4net configuration, the rollover log file is created wrong extension. The first file created with name of log_debug.txt and the rollover file created with log_debug.txt.1. but ideally it should be log_debug.1.txt.

I used preserveLogFileNameExtension value to be true, but it seems not working. Can you please check and let me know if anything wrong?

<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="DEBUG" />
      <levelMax value="DEBUG" />
    </filter>
    <file value=".\logs\log_debug.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="20" …
Run Code Online (Sandbox Code Playgroud)

log4net log4net-configuration log4net-appender

5
推荐指数
1
解决办法
4770
查看次数

log4net RollingFileAppender喷出大量日志,maxSizeRollBackups无效

我的服务突然涌现出大量的日志文件,并没有限制写入的文件数量.日志(有点)名为MyService.2015-01-08.1,MyService.2015-01-08.2,MyService.2015-01-08.3等,一直到218为止.我想将此限制为每天10次,而不是像现在这样无限制.以下是日志配置的内容:

<appender name="RollingFileAppender" type="Ourlib.Logging.CustomRollingFileAppender">
  <file value="c:\logs\myservice" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <staticLogFileName value="false" />
  <maxSizeRollBackups value="-1" />
  <countDirection value="1" />
  <maximumFileSize value="5000KB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%utcdate [%thread] %-5level %property{CorrelationId} %property{CallPath} %logger{2} - %message%newline" />
  </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

我做了一些改变,如下所示.值得注意的是,我已经设置maxSizeRollBackups为10,我认为这可以解决问题,但似乎并没有产生任何影响.

<appender name="RollingFileAppender" type="Ourlib.Logging.CustomRollingFileAppender">
  <file value="c:\logs\myservice" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <staticLogFileName value="false" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5000KB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%utcdate [%thread] %-5level %property{CorrelationId} %property{CallPath} %logger{2} - %message%newline" />
   </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

已经部署了更改,但它仍在创建新的日志文件,超过新设置的10.

假设我的部署正确完成,可能出现什么问题?我误解了我改变的配置属性,还是还有其他的东西在这里?

谢谢大家!

.net c# logging log4net log4net-appender

5
推荐指数
1
解决办法
1万
查看次数

自定义log4net appender中的日志记录/错误处理

我们有一个内部开发的日志系统,我们希望获得log4net的好处,例如能够同时使用多个appender.我们决定将旧的日志记录系统转移到自定义的log4net appender中.当遗留系统配置正确时,这很有效,但遗留记录器实际上写入了WCF客户端(使得详细日志记录变慢,我们想要使用其他log4net appender的原因),最近WCF配置不是很好本来应该.当发生这种情况时,应用程序似乎运行正常,但显然遗留系统的自定义appender无法正常工作.其他appender工作正常,但自定义旧版appender没有输出,也没有错误消息表明存在问题.

处理"递归"日志记录的正确方法是什么,即从自定义log4net appender内部进行日志记录?我尝试了一个天真的解决方案:从静态对象抓取log4net并在appender中记录:

public class MyCustomAppender : AppenderSkeleton
{

    protected override void Append(log4net.Core.LoggingEvent loggingEvent)
    {
        try
        {
            // something which throws here...
        }
        catch (Exception ex)
        {
            log4net.LogManager.GetLogger(this.GetType()).Error(this.GetType().ToString() + ": error during append", ex);
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

这是一个严重的失败,"System.Threading.LockRecursionException:在这种模式下不允许递归读取锁定." 很公平; 这是天真的解决方案.

我也尝试过:

this.ErrorHandler.Error(this.GetType().ToString() + ": error during append", ex);
Run Code Online (Sandbox Code Playgroud)

在异常处理程序中,因为它似乎可能是正确的.什么都不明显.

有没有办法在appender中通过log4net记录错误?或者我是否必须直接执行类似硬编码写入Windows事件日志的操作?显然存在无限递归下降的巨大危险,但我认为会有一些方法让操作员知道其中一个appender无法运行.

JR

log4net log4net-appender

5
推荐指数
1
解决办法
1896
查看次数

使用Log4Net AdoNetAppender记录大型消息

我有一个有几个Web服务调用的库.现在需要记录对外部Web服务发出的所有请求并记录收到的所有响应.这是为了以后的内部审计.

我的sql表看起来像这样.

CREATE TABLE [dbo].[WebServiceLog](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [nvarchar](255) NOT NULL,
    [Level] [nvarchar](50) NOT NULL,
    [Logger] [nvarchar](255) NOT NULL,
    [Message] [ntext] NOT NULL,
    [SessionID] [nvarchar](50) NOT NULL,
    [SearchID] [nvarchar](25) NULL
)
Run Code Online (Sandbox Code Playgroud)

请注意,Message字段是存储Web服务的请求和响应的位置.响应有时非常大,超过90k字符,有时甚至更多.(航班/酒店可用性搜索 - 可能返回大量数据)

我的appender配置如下.

<appender name="InfoAppender" type="log4net.Appender.AdoNetAppender">
        <bufferSize value="1"/>
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <connectionString value="Data Source=tcexpress;Initial Catalog=test;Persist Security Info=True;User ID=testUser;Password=**"/>
        <commandText value="INSERT INTO WebServiceLog ([Date],[Thread],[Level],[Logger],[Message],[SessionID], [SearchID]) VALUES (@log_date, @thread, @log_level, @logger, @message, @session_id, @search_id)"/>
        <parameter>
            <parameterName value="@log_date"/>
            <dbType value="DateTime"/>
            <layout …
Run Code Online (Sandbox Code Playgroud)

log4net log4net-appender

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

以编程方式设置文件名时,具有MinimalLock锁定模型的log4net无法正常工作

在动态设置日志文件名时,RollingFileAppenderlog4net.Appender.FileAppender+MinimalLock锁定模型一起使用似乎不会将任何内容记录到文件中.但是,在没有此锁定模型的情况下使用appender时,日志记录有效.

在下面的配置文件中,Appender1有效,但Appender2不是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>

  <log4net>
    <appender name="Appender2"
    type="log4net.Appender.RollingFileAppender" >
      <file type="log4net.Util.PatternString" value="%property{LogName}" />
      <encoding value="utf-8" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10000KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%logger] %message%n" />
      </layout>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    </appender>
    <appender name="Appender1"
    type="log4net.Appender.RollingFileAppender" >
      <file type="log4net.Util.PatternString" value="%property{LogName}" />
      <encoding value="utf-8" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10000KB" /> …
Run Code Online (Sandbox Code Playgroud)

c# log4net log4net-configuration log4net-appender

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