在多项目解决方案中使用log4net

时间:2016-03-23 06:25:02

标签: c# logging log4net

在多项目解决方案中使用log4net的最佳做法是什么? 我是否在每个项目上安装log4net Nuget? 我有办法在基础设施中创建一个使用log4net的记录器吗? 我会很感激任何想法。

1 个答案:

答案 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