代码之家  ›  专栏  ›  技术社区  ›  Ryan Taylor

如何配置log4net,以便将对象的属性映射到日志输出?

  •  4
  • Ryan Taylor  · 技术社区  · 15 年前

    public class LogMessage
    {
        public string Message { get; set; }
        public string Exception { get; set; }
        public string Version { get; set; }
        public string User { get; set; }
    }
    

    如果出现客户端错误,Flex客户端将填充此对象,并调用LogClientError方法,该方法通过log4net记录错误。

    [WebMethod()]
    public void LogClientError(LogMessage message) 
    {
        rollingLogger.Error(message);
    }
    

    目前这会打印LogMessage类的完全限定名,所以我目前的假设是log4net只需对传入的对象调用.ToString()。

    不过,我真正想做的是将LogMessage类中的每个属性映射到一个模式,这样log4net就能正确地写出所需的信息。我希望这样做的方式,典型的附加程序(数据库,文件,SMTP)都仍然支持。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Community kfsone    7 年前

    log4net有两条路可以走。第一个方法是为LogMessage实例创建一个自定义的对象呈现器。你需要实施 the IObjectRenderer interface register the implementation

    另一个更具重用性的方法是将patternlayout类子类化。然后,您的自定义模式布局可以支持用于命名属性的特殊语法,该布局可用于反映传入消息对象。

        2
  •  0
  •   Carl Bergquist    15 年前

    如果LogMessage是部分的,可以在LogMessage上创建ToString()方法。