我在写一个Log类,该Log类可能被其他类调用来写日志, 日志里我想记录调用方的类名,怎么做呢?不想传this指针做参数

xuxichun 2008-07-13 09:08:06

我在写一个Log类,该Log类可能被其他类调用来写日志,
日志里我想记录调用方的类名,
例如在A类中,Log类应能取得类A的名字A,
在B类中,若B使用了Log类,则Log类应能获得类B的名字B

怎么做呢?
不想传this指针做参数

...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rambooo 2008-07-18
  • 打赏
  • 举报
回复
good advice
bindsang 2008-07-14
  • 打赏
  • 举报
回复
补充一下,MethodInfo.GetCurrentMethod这个方法同样可以达到上面st.GetFrame(1).GetMethod()这样的效果,而且还简单优雅
yunfeng007 2008-07-14
  • 打赏
  • 举报
回复
恩,你可以看看log4net,这个有源代码的。你参考一下
bindsang 2008-07-13
  • 打赏
  • 举报
回复
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(false);
if(st.FrameCount > 1){
Console.WriteLine(st.GetFrame(1).GetMethod().DeclaringType.Name);
}

不知道这样行不行,把上面的代码放到记日志的地方,GetFrame方法中的参数值等于从第一次调用写日志的方法开始到运行到上面这代码的时候经过了几个方法。
例如
class Log
{
public void RecordLog(string log)
{
// 上面这段代码
// 直接调用这个方法的时候就是1,st.FrameCount的值必须大于1
}

private void InternalRecordLog(string log)
{
// 上面这段段码
// 间接调用这个方法的时候此时参数的值就该是2,st.FrameCount的值必须大于2
}

public void RecordLog2(string log)
{
InternalRecordLog(log);
}
}

应为Log类的代码是可控的,所以这个参数的值也应该是可以确定的

110,043

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧