gpt4 book ai didi

inversion-of-control - 将结构映射与 log4net 包装器一起使用

转载 作者:行者123 更新时间:2023-12-04 02:44:41 24 4
gpt4 key购买 nike

我有以下界面:

public interface ILogger
{
void Debug(string message, params object[] values);
void Info(string message, params object[] values);
void Warn(string message, params object[] values);
void Error(string message, params object[] values);
void Fatal(string message, params object[] values);
}

以及以下实现:
public class Log4netLogger : ILogger
{
private ILog _log;

public Log4netLogger(Type type)
{
_log = LogManager.GetLogger(type);
}

public void Debug(string message, params object[] values)
{
_log.DebugFormat(message, values);
}

// other logging methods here...

}

我的想法是使用结构映射来实例化 Log4netLogger 类,并使用执行日志记录的类的类型。但是,我一生都无法弄清楚如何将调用类的类型传递给结构映射,以便可以将其传递给日志实现的构造函数。任何关于如何做到这一点(或更好的方法)的建议将不胜感激。

最佳答案

我们在 log4net 周围使用类似的 ILogger 包装器,并且通常使用构造函数注入(inject)。我们使用拦截器作为负责创建 Logger 的工厂方法。这是我们用于日志记录设置的典型注册表。

public class CommonsRegistry : Registry
{
public CommonsRegistry()
{
For<ILogger>()
.AlwaysUnique()
.TheDefault.Is.ConstructedBy(s =>
{
if (s.ParentType == null)
return new Log4NetLogger(s.BuildStack.Current.ConcreteType);

return new Log4NetLogger(s.ParentType);
});

var applicationPath = Path.GetDirectoryName(Assembly.GetAssembly(GetType()).Location);
var configFile = new FileInfo(Path.Combine(applicationPath, "log4net.config"));
XmlConfigurator.ConfigureAndWatch(configFile);
}
}

当依赖于具体类型时,父类型空检查是必要的。

其余的是可选的 log4net 设置内容。

我喜欢这个设置的一件事是能够使用空记录器进行单元测试。

关于inversion-of-control - 将结构映射与 log4net 包装器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1942900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com