1

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

当我在我的机器上运行应用程序时,日志记录工作正常。当我在生产服务器上运行该应用程序时,日志记录工作正常。当我通过正在设置的 TaskScheduler 任务运行程序时,该任务正在由其他用户运行,我没有得到任何附加程序的日志输出。我正在使用 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 ");

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

4

1 回答 1

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注入您的班级即可。你不能在你声明内核的同一个地方请求一个ILoggerIKernel因为你没有上下文。

你可以这样做:

ILogger log = new Log4NetLoggerFactory().GetCurrentClassLogger();
log.Info("Test");
于 2013-03-07T13:07:45.493 回答