Log4Net Issue with .Net 4.0

本文关键字:Net with Issue Log4Net | 更新日期: 2023-09-27 17:59:53

我已经为我的问题寻找了几天的"修复方案",但一无所获。基本上,我有一个应用程序,它可以写入数据库并通过log4Net发送电子邮件。

这里是我初始化日志对象的地方:

private static readonly log4net.ILog log;
#endregion
static PTSentryService()
{
    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
    log = log4net.LogManager.GetLogger(typeof(PTSentryService));        
}

然后,我使用LogHelper类获取配置信息,下面是我在Web中的内容。配置:

<log4net>
<appender name="ADONetAppender_SqlServer" 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=ServerName;Initial Catalog=EventLog;Trusted_Connection=no;User ID=EventLogAdmin;Password=EVLA%dtm" />
  <commandText value="INSERT INTO EventLog ([TimeStamp],[SeverityLevel],[LoggerName],[Environment],[ApplicationName],[ApplicationPath],[ServerName],[Message],[ExceptionData]) VALUES (@TimeStamp,@SeverityLevel,@LoggerName,@Environment,@ApplicationName,@ApplicationPath,@ServerName,@Message,@ExceptionData)" />
  <parameter>
    <parameterName value="@TimeStamp" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>
  <parameter>
    <parameterName value="@SeverityLevel" />
    <dbType value="String" />
    <size value="10" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@LoggerName" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%logger" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@Environment" />
    <dbType value="String" />
    <size value="4" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{EnvironmentName}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@ApplicationName" />
    <dbType value="String" />
    <size value="128" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{AppName}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@ApplicationPath" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{AppPath}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@ServerName" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{log4net:HostName}" />
    </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="@ExceptionData" />
    <dbType value="String" />
    <size value="-1" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{exceptionDetails}" />
    </layout>
  </parameter>
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="Mailbox@group.com" />
  <from value="Mailbox@group.com" />
  <subject value="(LOCL) PT Sentry" />
  <smtpHost value="group.com" />
  <bufferSize value="1" />
  <lossy value="false" />
  <threshold value="ERROR" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%utcdate [%thread] %-5level %logger [%property{log4net:HostName}] - %message%newline%newlineException details:%newline%property{exceptionDetails}" />
  </layout>
</appender>
<root>
  <level value="INFO" />
  <appender-ref ref="ADONetAppender_SqlServer" />
  <appender-ref ref="SmtpAppender" />
</root>

发生的情况是ILog对象中的所有属性(isErrorEnabled等)都为false。我知道这是由于配置没有正确加载,但这是一个来自的复制粘贴作业。Net3.5项目,我知道工作。我是否需要进行更改以适应4.0?

任何信息都会很好,谢谢!

Log4Net Issue with .Net 4.0

您可能想做的是尝试简化配置,看看是某个appender还是其他配置值导致了这种情况。也许拿出你的数据库附加程序,看看它是否有效。

我以前也遇到过这个问题,当我的参考资料文件夹被顶起时。你可以在这里查看SO文章:log4net在dll 中不工作

我通常看到的另一件事是,记录器实际上是在调用配置之前声明的。我怀疑这是否重要,但只是把东西扔出去。

private static readonly log4net.ILog log = log = log4net.LogManager.GetLogger(typeof(PTSentryService));
static PTSentryService()
{
    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}

编辑:

除此之外,您可能还想打开log4net日志记录,看看是否有任何可疑之处。