Log4Net配置问题

4
所以我有一个网站和一个每天运行的控制台应用程序。
它们都调用一个名为ProcessIncident()的函数。网站允许您手动处理单个事件,而控制台应用程序每晚执行批处理。
在函数中,我有各种log4net Log.InfoFormat()和Log.DebugFormat()调用。
当我从网站运行时,日志记录正常。
当我从控制台应用程序运行时,根本没有日志记录。
指定的路径确实存在。
控制台应用程序配置如下:
<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">



  <logger name="NHibernate">
    <level value="OFF" />
    <appender-ref ref="NHibernateFileAppender" />
  </logger>


  <logger name="SMS">
    <level value="ALL" />
    <appender-ref ref="SmsFileAppender" />
  </logger>




<appender name="SmsFileAppender" type="log4net.Appender.RollingFileAppender">  
    <file value="D:\XXXX\SMS.IncidentBilling.log" />  
    <appendToFile value="true" />  
    <rollingStyle value="Size" />  
    <maxSizeRollBackups value="2" />  
    <maximumFileSize value="1MB" />  
    <staticLogFileName value="true" />  
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date]  %-5level %logger %message %newline" />
    </layout>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>  







  <appender name="NHibernateFileAppender" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="D:\Dev\SMS\Main\Source\SMS.Website\Logs\nhibernate.log" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date] %appdomain %-5level %c %message %newline" />
    </layout>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  </appender>








</log4net>

在控制台应用程序中,我已经引用了log4net dll,并声明了一个成员作为:
private  ILog Log = LogManager.GetLogger(typeof(Task));

有人能看出我在做什么愚蠢的事情吗?没有实际错误,只是没有通过控制台应用程序记录任何内容。

2个回答

3
除了Leniel Macaferi的回答之外,需要注意的是Web应用程序与控制台应用程序之间的一个区别是,如果您正在使用单独的自定义配置文件来记录log4net(即它不是App.config文件的一部分),则需要在构建和编译文件时设置该文件的属性以进行复制。否则,它将无法找到它。这通常不是Web应用程序的问题,因为它可以在根目录中找到该文件。
要更改它,在Visual Studio中: 在“解决方案资源管理器”中找到配置文件->右键单击文件->选择“属性”->“复制到输出目录”->“始终复制”。

对我来说,另一种可行的方法是将构建操作更改为content,然后日志将始终被创建。但我正在使用Visual Studio 2015,而当我写这篇文章时,已经是2017年了,所以谁知道呢... - Snoop

2

我最终调用了log4net.Config.XmlConfigurator.ConfigureAndWatch(log4netConfigFile);但你也可以不带参数调用它,它会查找你的app.config文件。 - Amjid Qureshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接