我正在使用 log4net,希望简化使用。现在,在我使用日志记录的每个类中(几乎所有类),我必须写:
public class MyClass
{
public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
try
{
// do something
}
catch(Exception ex)
{
log.Error("Problem doing something", ex);
}
}
我真正想做的是将第一个声明放在另一个类中,我可以在需要记录的任何地方继承它:
public class MyClass : Logging
{
try
{
// do something
}
catch(Exception ex)
{
log.Error("Problem doing something", ex);
}
}
public class Logging
{
public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
但是,如果我这样做,问题是
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
...最终选择类名 Logging,这对日志没有好处。如何让它获取使用继承的日志记录类的类的类名?
谢谢!
最佳答案
如果您从 Logging 类继承所有类,那么您将无法从任何其他类继承类并创建继承结构,因为 C# 不支持多重继承。您确实需要使用组合而不是继承。
您可以通过创建静态助手类来简化对记录器的调用:
public static class LoggerHelper
{
public static void WriteError(string message,Exception ex, Type type)
{
var log = log4net.LogManager.GetLogger(type);
log.Error(message, ex);
}
}
然后在你的类(class)中你会这样调用它:
public class MyClass
{
try
{
// do something
}
catch(Exception ex)
{
LoggerHelper.WriteError("Problem doing something", ex, this.GetType());
}
}
关于c# - 通过继承类中的声明获取当前类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20739238/