在多项目解决方案中使用log4net的最佳做法是什么? 我是否在每个项目上安装log4net Nuget? 我有办法在基础设施中创建一个使用log4net的记录器吗? 我会很感激任何想法。
答案 0 :(得分:2)
我个人更喜欢通过IoC容器注入我的记录器。你可以但不需要。
只需为日志记录需求创建一个接口,并将其放在所有项目都引用的项目中。 (即核心)
public interface ILogger
{
void Trace(string message);
void Trace(string format, params object[] args);
void Info(string message);
void Error(string message);
void Error(string message, Exception exception);
void Error(Exception exception);
}
现在,您可以为所需的每个记录器库编写实现,并根据需要进行切换。但是,我从未见过一个改变日志记录基础设施的项目。
我上面的ILogger接口的Nlog记录器实现。
using System;
using NLog;
namespace Tvinio.Core.Logging.NLog
{
public class NLogger : ILogger
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public void Trace(string message)
{
Logger.Trace(message);
}
public void Trace(string format, params object[] args)
{
Logger.Trace(format, args);
}
public void Info(string message)
{
Logger.Info(message);
}
public void Error(string message)
{
Logger.Error(message);
}
public void Error(string message, Exception exception)
{
Logger.Error(exception, message);
}
public void Error(Exception exception)
{
Logger.Error(exception);
}
}
}
现在,如果您只是为log4net记录器创建一个实现并初始化它的实例,那么Visual Studio将为您提供所有引用项目的引用,如果它们正在使用该实现。
我也强烈建议您阅读有关依赖注入的信息。你可以在这里找到一篇文章。 http://martinfowler.com/articles/injection.html