2013-03-07 69 views
1

我有一个使用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 "); 

任何提示,指针或任何....因为我不知道还有什么尝试。

回答

0

扩展名通常被用于这样的:

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"); 
+0

我已经改成了你写的方式,但我仍然当我运行与任务调度应用程序没有得到任何日志输出。我已经打开了log4net的内部调试,如果我与我的用户运行该应用程序,我会得到一堆附加的文本显示。但是,如果我通过任务计划程序运行应用程序,则在事件查看器中不会出现错误,并且没有日志输出。我可以看到该应用程序正在Windows任务管理器中运行。 – 2013-03-07 13:51:30

相关问题