我在代码中使用了几个方法的[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参数的内容,而不是只打印列表对象名称。有没有办法定制这个?
答案 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/