【问题标题】:How to override Logger.Error method in C#?如何在 C# 中覆盖 Logger.Error 方法?
【发布时间】:2017-01-12 06:40:38
【问题描述】:

我正在尝试在 Csfbs 类的 OverrideLogErrorMethod 中调用覆盖错误方法,如下所示

namespace IQCs
{
public class Csfbs
{
 public static string OverrideLogErrorMethod(string Name)
 {
   ILogger Logger = LogManager.GetLogger(LOGFILENAME);
   try
   {
     /*Somecode*/
      if (Name != "Name")
         throw new Exception();
      else
         return "success";
    }
    catch 
    {           
       Logger.Error("Overrided logger.error method");//here I want to call overriden error method
       return "override Success";
     }
  }
}

 public abstract class CustomLoggerClass: ILogger //Implementing Ilogger interface which implements error method
 {
    public abstract void Error(string message);
 }
public class CUs : CustomLoggerClass
{
   //Overriden error method in CUs
    public override void Error(string message)
    {           
        string messageInfo = "Control is in overrided Logger.error method";
        ILogger Logger = LogManager.GetLogger(LOGFILENAME);
        Logger.Info(messageInfo);
    }
 }
}

控件不会覆盖错误方法,代码中的哪些更改会使控件转到覆盖错误方法?我不想更改方法的名称,因为该名称在很多地方都使用过

【问题讨论】:

  • Logmanager.GetLogger 是否返回 CU 实例?它需要你的代码才能工作

标签: c# interface polymorphism overriding


【解决方案1】:

创建您自己的扩展方法。

它必须定义在一个静态类中,并且是一个静态方法。例如

定义:

public static class Log4NetExtensions
{
    public static void MySpecialError(this Log log, string details, string message, Exception exception)
    {
        //Do something with parameters
    }
}

用途:

Log.MySpecialError(details, message, ex);

【讨论】:

    【解决方案2】:

    您还可以实现自己的 ILogger 版本(在一定程度上拥有它)并通过 DI 配置交换注入的功能。

    因此,您无需调用 getLogger,而是注入稍微不同的实现,其中包含您自己的逻辑。此外,就关注点分离而言,这将是一种更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多