2010-09-08 137 views
4

所以我有一个网站和一个控制台应用程序,每天运行。Log4Net配置问题

它们都调用一个名为ProcessIncident()的函数。该网站允许您为个别事件手动执行此操作,并且控制台应用程序每晚都会执行一次批处理。

在函数我有不同的log4net的Log.InfoFormat()和Log.DebugFormat()调用

当我从网站上运行它记录罚款

当我从控制台应用程序它不”跑吨数在所有

definatly指定的路径存在

控制台应用程序配置是如下

<?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> 

在控制台应用程序,我已经refereneced log4net的DLL和我declareing amember作为

private ILog Log = LogManager.GetLogger(typeof(Task)); 

任何人都可以看到什么愚蠢的,我做的事情。这是没有实际的错误,只是没有什么是通过控制台应用程序记录gettign

回答

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?)

+0

我结束了通话 log4net.Config.XmlConfigurator.ConfigureAndWatch(log4netConfigFile); 但是你也可以不带参数地调用它,并且它会在你的app.config文件中看到 – 2010-09-08 05:21:32

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"

+0

另一种适用于我的方法是将构建操作更改为* content *,然后日志将始终创建。但是我在Visual Studio 2015中工作,目前我正在写这篇文章,所以谁知道...... – Snoopy 2017-02-03 16:08:59