通过TaskScheduller使用Log4Net扩展Ninject没有日志记录输出且没有错误

时间:2013-03-07 12:32:44

标签: ninject log4net ninject-extensions

我有一个使用Ninject和Log4Net的控制台应用程序项目。

当我在我的机器上运行应用程序时,日志记录工作正常。当我在生产服务器上运行应用程序时,日志记录工作正常。当我通过正在设置的TaskScheduller任务运行程序时,正在由其他一些用户运行,我得不到任何一个appender的日志记录输出。我使用的是RollingFileAppender,SmtpAppender和AdoNetAppender。 奇怪的是,程序运行正常,它只是没有记录任何东西。

我认为因为如果我在本地运行应用程序正在运行,log4net配置就可以了。

我在程序的main方法中解析logger,然后在需要时通过构造函数参数注入它。这就是我在app的主要方法中获取记录器的方法:

XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));

var kernel = new StandardKernel();
var loggerFactory = kernel.Get<Log4NetLoggerFactory>();
ILogger logger = loggerFactory.GetCurrentClassLogger();

logger.Info(" Test ");

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

1 个答案:

答案 0 :(得分: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担心将ILogger注入你的班级。您不能在声明内核的同一位置ILogger请求IKernel,因为您没有上下文。

你可以这样做:

ILogger log = new Log4NetLoggerFactory().GetCurrentClassLogger();
log.Info("Test");