我想我错过了一些东西。我在类库dll中编写了一个自定义log4net appender,所以我想我也应该通过它来公开log4net。这样其他人只需添加一个带有log4net的日志记录类库,就可以获得自定义appender。
我是否需要将log4net包装起来执行此操作,还是有其他方式来公开它?
答案 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(尽管在更新所有配置文件时仍然会有一些工作)