none
关于用户行为跟踪问题的解决方案 RRS feed

  • 问题

  • 大家好,我想在项目中加入一个跟踪器,它会自动记录用户登录后的所有行为,例如进入那个页面、点击了什么按钮(或者说执行了什么方法),如果我不想再每个功能里加入日志来记录,请问有什么方便的办法解决这个问题,类似于一种过滤器,把用户和服务器的所有交互都记录下来。
    2009年9月15日 9:02

答案

  • 这当然可以,可我不想大量改动原有的代码,因为需要记录日志的地方很多。我有一个思路,因为要记录的都是业务层的方法调用信息,如果能在业务层的任一个方法被调用的同时来记录信息是最好的了,但是怎么捕捉到一个类的方法被调用呢?

    您好,据我所知是没有不改动现有的类层次关系就能达到您的目的。我曾经也留意过相似的需求(在微软的国外论坛也留意过),目前得到的方法有两种:
    1、利用反射来动态Emit,来创建一个新的类,例如Spring.net的AOP就是采用这个方法
    2、利用上下文来加载代理,但要求类是继承ContextBoundObject。
    以上作为参考,希望有帮助!
    2009年9月23日 12:08
  • log4net是很成熟的这样的工具

    可以参考下咯
    恭喜自己5星用户达成
    2009年9月15日 9:32
    版主
  • 是不是可以考虑用继承的方法,关键请求都从一个基类派生,基类实现记录的功能,派生类提供需要记录的数据。

    2009年9月17日 2:24
  • 感谢,我已经找到解决办法了,与你说的应该是相同思路,使用PostSharp,他动态添加IL代码,达到我们的目的,对原有代码改动量很少。
    2009年9月24日 1:48

全部回复

  • 大家好,我想在项目中加入一个跟踪器,它会自动记录用户登录后的所有行为,例如进入那个页面、点击了什么按钮(或者说执行了什么方法),如果我不想再每个功能里加入日志来记录,请问有什么方便的办法解决这个问题,类似于一种过滤器,把用户和服务器的所有交互都记录下来。
    2009年9月15日 9:08
  • log4net是很成熟的这样的工具

    可以参考下咯
    恭喜自己5星用户达成
    2009年9月15日 9:32
    版主
  • 多谢回复,可能有些问题,log4net是日志工具,它好像并没有类似于过滤器的功能,我的目标是不在每个功能代码处记录日志,而是在global这样的地方来搜集用户的动作,这样可以吗?另外我也在global里的Application_BeginRequest方法中来处理,它的确可以捕捉到所有的动作,但是这里是全局变量,我只知道谁触发了什么动作,而不知道具体的细节,例如动作参数等信息。
    2009年9月17日 2:17
  • 是不是可以考虑用继承的方法,关键请求都从一个基类派生,基类实现记录的功能,派生类提供需要记录的数据。

    2009年9月17日 2:24
  • 这当然可以,可我不想大量改动原有的代码,因为需要记录日志的地方很多。我有一个思路,因为要记录的都是业务层的方法调用信息,如果能在业务层的任一个方法被调用的同时来记录信息是最好的了,但是怎么捕捉到一个类的方法被调用呢?
    2009年9月17日 3:44
  • 没有回信了?不要沉底,大家难道没有类似的需求吗?
    2009年9月23日 3:51
  • 这当然可以,可我不想大量改动原有的代码,因为需要记录日志的地方很多。我有一个思路,因为要记录的都是业务层的方法调用信息,如果能在业务层的任一个方法被调用的同时来记录信息是最好的了,但是怎么捕捉到一个类的方法被调用呢?

    您好,据我所知是没有不改动现有的类层次关系就能达到您的目的。我曾经也留意过相似的需求(在微软的国外论坛也留意过),目前得到的方法有两种:
    1、利用反射来动态Emit,来创建一个新的类,例如Spring.net的AOP就是采用这个方法
    2、利用上下文来加载代理,但要求类是继承ContextBoundObject。
    以上作为参考,希望有帮助!
    2009年9月23日 12:08
  • 感谢,我已经找到解决办法了,与你说的应该是相同思路,使用PostSharp,他动态添加IL代码,达到我们的目的,对原有代码改动量很少。
    2009年9月24日 1:48