2016-03-29 35 views
1

我在我的代碼中的幾個方法上使用[Log]屬性。這很適合記錄每種方法的進入和退出以及打印輸入參數的詳細信息。PostSharp - 如何自定義通用列表輸入參數的日誌輸出?

但是,當輸入參數是一個通用列表時,日誌細節並不是非常有用。

例如:

[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]}) 
 

我想輸出列表參數的內容,而不是隻打印列表對象名稱。有沒有一種方法來定製這個?

回答

1

這可能有點過度工程,但是當我使用Postsharp時,我通常通過繼承「OnMethodBoundaryAspect」來創建自己的日誌記錄方面,這使我可以控制記錄什麼,如何以及在哪裏。

我有實現它可以在這裏找到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/

+0

謝謝。你的例子非常有幫助。 – ruhler

1

當前版本的PostSharp日誌記錄庫僅使用.NET的標準string.Format()工具,因此您只能通過在自己的類上重寫ToString()方法來自定義輸出。

爲未來版本的PostSharp日誌記錄庫之一計劃支持自定義格式化程序。在此之前,解決方法是實現自定義日誌記錄方面。您可以在GitHub上找到一個入門示例:https://github.com/postsharp/PostSharp.Samples/tree/master/PostSharp.Samples.CustomLogging

+0

我想我會使用解決方法,直到發佈PostSharp功能。謝謝! – ruhler