有人知道如何更方便地组织日志记录语句吗?
我想没有这样的方法,但是,这是一个小例子:
// 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.Log
或Log
或其他任何陈述就像主要代码部分的垃圾一样,也许有一种聪明的方式将它们带到某个地方?
我知道有一些不错的软件包,比如PostSharp
,它允许在之前和之后完成日志记录 - 但是如果函数必须记录他们工作的某些中间结果会怎样? / p>
或者这只是一个分解问题而且我应该让一切都更加分解,以便我可以将所有可记录条目标记为[Loggable]
?
任何建议将不胜感激。 您如何登录代码?
答案 0 :(得分:1)
如何将方法的内部逻辑划分为其他私有方法来进行中间工作,
或者,如果你不想在课堂上使用太多只能在一个地方使用的方法,那么......
定义一个内部类来完成工作(如果你将父类的引用传递给内部类的构造函数,它可以自动访问父类的私有成员)。
内部类可以有许多私有方法,只能通过内部类的方法访问。因此,在内部类上定义一个公共/内部方法,由外部类上的方法调用。
使用这两种方法,您可以使用AOP的属性(例如PostSharp)修饰新方法。
答案 1 :(得分:0)
由于AOP框架的限制,您需要使用分解来获得好处。无论如何你应该这样做。方法应该保持非常简单,只做一件事。将条件逻辑提取到方法中然后创建PostSharp方面。
我这样说是因为如果您需要在您的条件下进行日志记录,那么该代码块足够重要,可以使用它自己的方法。除非你只是为了追踪原因而做这件事,否则你可以做任何事情,因为它应该是暂时的。