2013-03-07 68 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

相關問題