C#日志问题

时间:2011-05-04 22:01:54

标签: c# frameworks logging postsharp

有人知道如何更方便地组织日志记录语句吗?

我想没有这样的方法,但是,这是一个小例子:

        // Take the longest path in the graph and convert it into the
        // image series, note that we project every element from the
        // sequence into the image path so that 'new Series(...)' constructor
        // could be used.
        var paths = EnumerateSimpleAndLoopedPaths().ToList();

        logger.Log(Something1);

        if (paths.Any())
        {
            // Take the longest possible path.
            var selectedPath = paths.OrderBy(x => x.Count()).Last();

            logger.Log(Something2);

            var imagesForSelectedPath = selectedPath.SelectMany(...

显然那些logger.LogLog或其他任何陈述就像主要代码部分的垃圾一样,也许有一种聪明的方式将它们带到某个地方?

我知道有一些不错的软件包,比如PostSharp,它允许在之前和之后完成日志记录 - 但是如果函数必须记录他们工作的某些中间结果会怎样? / p>

或者这只是一个分解问题而且我应该让一切都更加分解,以便我可以将所有可记录条目标记为[Loggable]

任何建议将不胜感激。 您如何登录代码?

2 个答案:

答案 0 :(得分:1)

如何将方法的内部逻辑划分为其他私有方法来进行中间工作,

或者,如果你不想在课堂上使用太多只能在一个地方使用的方法,那么......

定义一个内部类来完成工作(如果你将父类的引用传递给内部类的构造函数,它可以自动访问父类的私有成员)。
内部类可以有许多私有方法,只能通过内部类的方法访问。因此,在内部类上定义一个公共/内部方法,由外部类上的方法调用。

使用这两种方法,您可以使用AOP的属性(例如PostSharp)修饰新方法。

答案 1 :(得分:0)

由于AOP框架的限制,您需要使用分解来获得好处。无论如何你应该这样做。方法应该保持非常简单,只做一件事。将条件逻辑提取到方法中然后创建PostSharp方面。

我这样说是因为如果您需要在您的条件下进行日志记录,那么该代码块足够重要,可以使用它自己的方法。除非你只是为了追踪原因而做这件事,否则你可以做任何事情,因为它应该是暂时的。