我正在嘗試在我的新WPF 4.5 CompositeWPF(Prism)項目中實現日誌記錄功能。 這需要我在我的代碼中實現ILoggerFacade。該接口只實現1種方法:Log(string message, Category category, Priority priority)
。如何使用CallerMemberName屬性更改ILoggerFacade實現以跟蹤調用方法?
的ILoggerFacade
接口:
public interface ILoggerFacade
{
void Log(string message, Category category, Priority priority);
}
我的實現:
public class Log4NetLogger : ILoggerFacade
{
private static readonly ILog m_Logger = LogManager.GetLogger(typeof(ILoggerFacade));
public void Log(string message, Category category, Priority priority)
{
switch (category)
{
case Category.Debug:
m_Logger.Debug(message);
break;
case Category.Warn:
m_Logger.Warn(message);
break;
case Category.Exception:
m_Logger.Error(message);
break;
case Category.Info:
m_Logger.Info(message);
break;
}
}
}
我相信,在新推出的[CallerMemberName]
屬性我應該能夠得到,如果只有我傳遞給記錄來電者的方法名知道如何做這樣的事情:
public class Log4NetLogger : ILoggerFacade
{
public void Log(string message, Category category, Priority priority, [CallerMemberName] string callerMethod = "")
{
...
所以我的問題,我如何覆蓋由第三方(Prism)接口強制執行的Log
方法包含1個額外的可選參數?或者,如何使用此屬性傳遞調用方法名稱,以便我可以記錄它?
我已經看到了其他類似的問題,但[CallerMemberName]屬性是.NET 4.5中的一個新特性,所以我希望得到比所提供的更好的解決方案。
感謝。這是我最後的選擇。如果有辦法,我寧願不去。 – LukeP 2013-03-06 21:51:37
我沒有想到接口方法參數上的'[CallerMemberName]'屬性可以工作,但它確實!真棒!在我的情況下,我有日誌接口的源代碼,所以改變接口方法來添加屬性是沒問題的。這是一個很好的問題和答案,真的讓我擺脫了泡菜,謝謝你們。 – 2015-10-21 09:25:36