在方法和类之间使用记录器发送是一个好习惯吗?

时间:2015-06-12 14:01:40

标签: logging

我在这个项目中,所有方法都使用记录器和字符串来说明发生了什么。例如doFoo(Logger log,String doingBar,Object foo,Object bar)。在那之后,通常会有一些日志消息打印到更多的BAR +。

所以对象foo和bar只是需要的东西,另外两个只是用于日志消息,他们说它们是这样的,所以你可以看到在你来到这个类之前发生了什么。这是一个好习惯吗?

我习惯于每个类都有自己的记录器,你可以通过记录必要的内容来跟踪系统中发生的事情,然后有一些sessionId,以便你可以跟踪发生的事情。

感谢您的投入!

2 个答案:

答案 0 :(得分:0)

我不认为这是最好的方法。

我会为每个类设置一个单独的记录器,因此该类上的所有方法都共享它,并且记录器可以将类信息添加到跟踪中(如类名)。

如果您想在所有类之间共享,也可以使用单例记录器。

如果您只记录方法入口/出口并使用IoC容器,您可能需要查看拦截器,这可以让您轻松地执行相同的操作。

答案 1 :(得分:0)

尝试ReflectInsight。实际上,它们只是为了这个目的而有一个名为TraceMethod的方法。

    static void SomeMethod()
    {
        ReflectInsight ri1 = RILogManager.Default;

        using (ri1.TraceMethod(MethodBase.GetCurrentMethod))
        {
            // your code ...

            ri1.SendWarning("some warning");
            ri1.SendJSON("some json object", jobj);
        }
    }

如果您不喜欢升序代码,如上所述,您可以将PostSharp扩展库用于使用AOP的RI。

http://insightextensions.codeplex.com/wikipage?title=Getting%20Started%20with%20PostSharp%20Extension&referringTitle=Documentation

  1. 仅Live Viewer可以获得80,000 msg / sec
  2. 实时内存占用量很小,因为大多数消息缓存在硬盘驱动器上
  3. 具有自动保存/自动清除功能。
  4. 目的地:TextFile,BinaryFile,动态查看器,事件日志,自定义目的地等......
  5. 可以轻松使用NLog,Log4net,EntLib,Common Logging框架映射到RI的框架(但是,您将无法记录数据集,集合等丰富的详细信息。)
  6. enter image description here

    免责声明:我不是直接为ReflectSoftware工作,但我是帮助构建ReflectInsight的主要开发人员之一。我的主要目标是帮助任何具有日志框架需求的人,并且只响应适用于此类的stackoverflow问题。