我有一个使用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 ");
任何提示,指示或任何......因为我不知道还有什么可以尝试。
答案 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");