Ninject Log4Net扩展通过TaskScheduller没有日志输出并且没有错误
问题描述:
我有一个使用Ninject和Log4Net的控制台应用程序项目。Ninject Log4Net扩展通过TaskScheduller没有日志输出并且没有错误
当我在我的机器上运行应用程序时,日志记录工作正常。当我在生产服务器上运行应用程序时,日志记录工作正常。当我通过TaskScheduller任务正在运行该程序,该任务正在被其他用户运行时,我没有任何appender输出日志。我正在使用RollingFileAppender,SmtpAppender和AdoNetAppender。 奇怪的是,程序运行良好,它只是没有记录任何东西。
我认为,因为该应用程序工作,如果我在本地运行它,log4net配置是好的。
我在程序的主要方法中解析记录器,然后在需要时通过构造器参数注入它。这是我如何得到应用的主要方法记录器:
XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));
var kernel = new StandardKernel();
var loggerFactory = kernel.Get<Log4NetLoggerFactory>();
ILogger logger = loggerFactory.GetCurrentClassLogger();
logger.Info(" Test ");
任何提示,指针或任何....因为我不知道还有什么尝试。
答
扩展名通常被用于这样的:
public class MyClass
{
private readonly ILogger log;
public MyClass(ILogger log)
{
this.log = log;
log.Info("Created MyClass");
}
}
XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));
using (IKernel kernel = new StandardKernel())
{
kernel.Bind<MyClass>().ToSelf();
kernel.Get<MyClass>(); // will cause the log message to print
}
就让Ninject担心注射到类。由于没有上下文,因此无法在声明内核的同一地方从IKernel
请求。
你可以这样做,但:
ILogger log = new Log4NetLoggerFactory().GetCurrentClassLogger();
log.Info("Test");
我已经改成了你写的方式,但我仍然当我运行与任务调度应用程序没有得到任何日志输出。我已经打开了log4net的内部调试,如果我与我的用户运行该应用程序,我会得到一堆附加的文本显示。但是,如果我通过任务计划程序运行应用程序,则在事件查看器中不会出现错误,并且没有日志输出。我可以看到该应用程序正在Windows任务管理器中运行。 – 2013-03-07 13:51:30