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

using log4net in a multi projects solution

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

我个人更喜欢通过 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