簡體   English   中英

log4net自定義日志對象和appender

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM