PostSharp - 如何自定义通用列表输入参数的日志输出?

时间:2016-03-29 16:18:04

标签: c# list generics logging postsharp

我在代码中使用了几个方法的[Log]属性。这非常适合记录每个方法的进入和退出,以及打印输入参数的详细信息。

但是,当输入参数是通用列表时,日志详细信息不是很有用。

例如:

[Log]
public List<InventoryResponse> GetInventory(List<InventoryRequest> request)
{
...

这会将以下内容输出到日志文件中:


Entering: Inventory.GetInventory(this = {CC.Viero.Inventory.Service.Inventory}, {System.Collections.Generic.List`1[CC.Viero.Inventory.Service.InventoryRequest]})

我想输出list参数的内容,而不是只打印列表对象名称。有没有办法定制这个?

2 个答案:

答案 0 :(得分:1)

当前版本的PostSharp日志记录库仅使用.NET的标准string.Format()工具,因此您只能通过覆盖自己类的ToString()方法来自定义输出。

计划为PostSharp日志库的未来版本之一支持自定义格式化程序。在此之前,解决方法是实现自定义日志记录方面。您可以在GitHub上找到一个入门示例:https://github.com/postsharp/PostSharp.Samples/tree/master/PostSharp.Samples.CustomLogging

答案 1 :(得分:1)

这可能有点过度工程,但是当我使用Postsharp时,我通常通过继承&#34; OnMethodBoundaryAspect&#34;来创建我自己的日志记录方面。这让我可以控制记录的内容,方式和位置。

我有一个实现自定义日志记录方面的示例,可以在https://github.com/vnvizitiu/AOP/blob/master/PostSharpTutorial/LoggerAspect/LoggingAspect.cs找到,虽然这是一种更通用的方法,您也可以看到此链接

http://www.postsharp.net/blog/post/Day-4-OnMethodBoundaryAspect

或此http://www.agile-code.com/blog/aop-method-interception-in-postsharp-with-onmethodboundaryaspect/