[英]log4net custom log objects and appender
我想擴展log4net以接受自定義日志對象作為參數。 例如:
public class MyLogObject
{
public string PropA;
public int PropB;
}
private MyLogObject entry = new MyLogObject() {PropA = "FooBar", PropB = 1};
Log.Debug(entry);
......這應該與例外情況類似。
在第二步中,自定義日志對象應由自定義數據庫appender寫入數據庫。 自定義數據庫appender將類似於ADONetAppender,但有一些修改,如內部緩沖的日志條目隊列。
有誰知道這是否適用於log4net,如果有任何示例可以幫助我如何做到這一點?
我的日志對象和數據庫字段的屬性是固定的,因此不需要使它們可配置。
更新我的想法是配置log4net以將自定義“MyAppender”與自定義渲染器“MyRenderer”一起使用。 渲染器將返回一個簡單的SQL-insert語句,並由appender寫入數據庫。 也許有更好的方法來做到這一點。
您可以將自定義對象存儲在ThreadContext(或全局上下文中,如果有意義的話)
log4net.ThreadContext.Properties [“MyLogObject”] =條目;
您可以在您的appender中輕松提取該屬性。 如果您提供“ToString()”覆蓋,您甚至可以使用普通的appender打印它並指定轉換模式:
date%-5level%property {MyLogObject} - %message%newline
為log4net創建一個接口和一個包裝器是個好主意。 然后添加接受對象作為參數的方法,以便隱藏有關設置上下文的詳細信息。
為什么不使用AdoNetAppender? appender繼承了BufferingAppenderSkeleton的內置緩沖功能。
如果不需要將MyLogObject
類的每個屬性存儲在單獨的表列中,則可以覆蓋ToString()
方法。 該字符串將用作log%消息%的值:
public class MyLogObject
{
public string PropA;
public int PropB;
override public string ToString()
{
return PropA + " " + PropB;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.