如何从类库dll中提供log4net?

时间:2012-02-03 07:47:06

标签: .net log4net

我想我错过了一些东西。我在类库dll中编写了一个自定义log4net appender,所以我想我也应该通过它来公开log4net。这样其他人只需添加一个带有log4net的日志记录类库,就可以获得自定义appender。

我是否需要将log4net包装起来执行此操作,还是有其他方式来公开它?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

我更喜欢包装log4net并为所有日志记录需求提供单一入口点。 例如

我的界面将是这样的

public interface ICustomLogger : ILog
    {

    }

我的记录器类将是这样的。

    public  class CustomLogger : ICustomLogger
        {
            private ILog log4netLogger;
            public TMALogger(ILog logger)
            {
                log4netLogger = logger;
            }
//Plus all the methods that you would need to implement for ICustomLogger
    }

LogManager就是这样。

public class LogManager
    {
        public static ICustomLogger GetLogger(Type type)
        {
            ICustomLogger logger = null;
            try
            {
                ILog log4netLogger = log4net.LogManager.GetLogger(type);
                CustomLogger customLogger = new CustomLogger(log4netLogger);
                logger = customLogger;
            }
            catch (Exception ex)
            {
                logger = null;

            }
            return logger;
        }
    }

最后,记录器将在类

中使用
private readonly ICustomLogger _logger = LogManager.GetLogger(typeof(ClassName));

我希望这会有所帮助。

答案 2 :(得分:0)

如果你写了一个appender,你需要做两件事才能使用它:配置它(像任何其他appender一样)并确保你的程序集已经部署。

为了配置它,您需要在log4net配置中的某个位置为您的appender提供一个块:

<appender name="YourCustomAppenderName" type="YourAssemblyNameSpace.YourAppenderType">
    ....
</appender>

根据我的经验,当你fully qualify组装时它最有效,但并非绝对必要。第二部分可以由安装程序完成,但可能有点粗糙但非常有效的方法是在应用程序中创建对appender程序集的引用。这样,程序集将始终复制到输出目录。

此处不需要编写包装器。可能有理由编写包装器,但如果您希望能够具有其他功能(例如,接受其他参数的方法),则应该这样做。包装器的另一个原因可能是你可以用其他东西替换log4net(尽管在更新所有配置文件时仍然会有一些工作)