Log4Net配置问题

时间:2010-09-08 04:16:27

标签: .net logging configuration log4net console-application

所以我有一个网站和一个每天运行的控制台应用程序。

它们都调用一个名为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));

任何人都可以看到我正在做的任何愚蠢。这不是实际错误,只是通过控制台应用程序记录gettign

2 个答案:

答案 0 :(得分:3)

Leniel Macaferi's answer一起,Web应用与控制台应用的一个区别是,如果您使用单独的自定义配置文件进行log4net(即它不是App.config文件的一部分),那么您需要设置要在构建和编译时复制的文件属性。否则,它将找不到它。这通常不是Web应用程序的问题,因为它可以在根目录中找到该文件。

要在Visual Studio中更改它:

Find the config file in Solution Explorer -> right-click the file -> select Properties -> Copy to Output Directory -> "Copy always"

答案 1 :(得分:2)

我不记得我做了什么,但我认为你应该在使用之前初始化log4net。

像这一行:

log4net.Config.XmlConfigurator.Configure();

请点击此处了解更多信息:

Have log4net use application config file for configuration data.

也可以看到这个(他正在呼叫log4net.Config.BasicConfigurator.Configure();):

Log4Net Tutorial in C# .net (How can I show log in a file?)