我在Windows服务项目中使用NLog。我们使用EasyNetQ进行消息传递,并且我已经扩展了EasyNetQLogger,以便在我的日志文件中显示EasyNetQ-logmessages。
班级是这样的:
public class EasyNetQLogger : IEasyNetQLogger
{
private readonly Logger _traceLogger;
public EasyNetQLogger()
{
_traceLogger = LogManager.GetCurrentClassLogger();
}
public void DebugWrite(string format, params object[] args)
{
_traceLogger.Trace(String.Format(format, args));
}
public void InfoWrite(string format, params object[] args)
{
_traceLogger.Info(String.Format(format, args));
}
public void ErrorWrite(string format, params object[] args)
{
_traceLogger.Error(String.Format(format, args));
}
public void ErrorWrite(Exception exception)
{
_traceLogger.Error("Exception in EasyNetQ", exception);
}
}
当我创建总线实例时,我在ServiceController类中这样做:
var bus = RabbitHutch.CreateBus(config.MessageBus, x => x.Register<IEasyNetQLogger>(_ => new EasyNetQLogger()));
我的记录器名称变为&#34; ServiceController&#34;而不是...... EasyNetQLogger。我希望EasyNetQ消息出现在一个单独的文件中,但我不能,因为此ServiceController类中还有其他内容。
有谁知道如何实现所期望的&#34; EasyNetQLogger&#34;记录器名称?
答案 0 :(得分:0)
将_traceLogger
定义为静态可以解决问题:
public class EasyNetQLogger : IEasyNetQLogger
{
private static readonly Logger _traceLogger;
static EasyNetQLogger()
{
_traceLogger = LogManager.GetCurrentClassLogger();
}
//...
}