【发布时间】:2014-03-08 07:11:55
【问题描述】:
当我在我的 PatternLayout 中使用 %l 或 %L 进行调试时,我得到了我的扩展静态类的位置和该文件中的行号,而不是调用者的位置和行。任何标准的记录方法都会产生正确的结果。有没有办法让扩展方法做到这一点?
我的 Log4NetExtensions.cs 的一部分
namespace Dashboard
{
public static partial class Util
{
public static void SqlError(this ILog log, SqlException sqle)
{
if (log.IsDebugEnabled)
{
string[] names = Enum.GetNames(typeof(Dashboard.Models.Response.DashError.StandardErrors));
int idx = Array.IndexOf(names, sqle.Message);
if (idx > 0)
{
log.Debug(sqle.Message);
}
else
{
log.Error(sqle);
}
}
else
{
log.Error(sqle);
}
}
}
}
编辑: 根据 wageoghe 的回答,我将 log.Error() 和 log.Debug 更改为此,但它仍然打印 Util 而不是调用者:
log.Logger.Log(typeof(Util), Level.Error, sqle.Message, sqle);
【问题讨论】:
-
您能在此处添加您的扩展方法的代码吗?
-
我更新了我的答案以包含一个扩展方法的示例,该方法确实维护了正确的呼叫站点信息。我不知道它是否对您有帮助,因为您已经使用了包装器,但我想我会传递它。
标签: c#-4.0 log4net extension-methods