所以我有一个网站和一个每天运行的控制台应用程序。
它们都调用一个名为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
答案 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();
):