c# - 如何更改 ILoggerFacade 实现以使用 CallerMemberName 属性跟踪调用方方法?

标签 c# .net prism .net-4.5

我正在尝试在我的新 WPF 4.5 CompositeWPF (Prism) 项目中实现日志记录功能。 这需要我在我的代码中实现 ILoggerFacade。该接口(interface)只实现了1个方法:Log(string message, Category category, Priority priority)

ILoggerFacade 接口(interface):

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) 接口(interface)强制执行的 Log 方法以包含 1 个额外的可选参数?或者如何使用此属性传递调用方方法名称以便记录它?

我见过其他类似的问题,但 [CallerMemberName] 属性是 .NET 4.5 中的一项新功能,所以我希望有比所提供的更好的解决方案。

最佳答案

不幸的是,您能够完成这项工作的唯一方法是修改 Prism 源代码并重建二进制文件。例如在 ILoggerFacade 的 Log 方法中添加 callerMethod 参数。

public interface ILoggerFacade
{
    void Log(string message, Category category, 
             Priority priority, [CallerMemberName] string callerMethod = "");
}

如果有任何类已经实现了 ILoggerFacade,您也需要修改它们。

关于c# - 如何更改 ILoggerFacade 实现以使用 CallerMemberName 属性跟踪调用方方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15258263/

相关文章:

c# - 如何禁用对我的进程的 Hook ?

c# - 为什么无限在Windows 10控制台中打印为 "8"?

javascript - MVC .NET 上的 ajax 帖子未正确传递数组

c# - 对象与 Knockoutjs 的绑定(bind)列表

c# - 从 Azure 表存储检索超过 100 万条记录

WPF DataTemplate/DataTemplateSelector -- 2 个不同 View 使用的 ViewModel 的最佳方法?

c# - 可以将参数传递给 WPF 用户控件吗?

wpf - 在 Prism 中使用 ModuleManager 加载模块

c# - 并非所有代码路径都会返回一个值 - 有什么问题吗?

c# - 如何在文件不再打开时立即收到通知?