簡體   English   中英

log4net什么時候登錄?

[英]log4net when to log?

任何人都有關於何時登錄的任何好信息,當我輸入每個c#方法並在退出時記錄另一個信息時,我正在考慮記錄INFO類型。

這被認為是好還是壞? 我會看到性能受到打擊嗎?

如果我在輸入方法時記錄INFO,那么想法是記錄方法名稱,以及所有變量和值

任何想法如何在不輸入每個值和方法名稱的情況下自動完成,我想我可以使用反射,但也許我會看到這里放慢速度?

如果反射會降低速度,也許我可以在程序失敗時使用“REFLECTION”位,因此我可以編寫堆棧跟蹤,所有變量和值。

關於此的任何想法或例子都非常感激

謝謝

您可以使用AOP(面向方面​​編程)樣式的日志記錄進行方法級日志記錄。

有一個很好的框架叫做Log4PostSharp 它是PostSharp的一個插件,可以寫入Log4Net

它基本上歸結為用這樣的屬性裝飾你的方法:

[Log(LogLevel.Info, "Doing something")]
public void CountCharacters() {
   // do your logic here
}

我會使用甚至更低的級別 - TRACE(如果它在log4net中可用)。 DEBUG適用於記錄特定場合的東西,而TRACE更適合用於轉儲方法調用,參數和類似的東西。 絕對不是INFO,它更適合在更高級別上記錄功能性內容。

我會使用DEBUG而不是INFO,並為你想要登錄生產的東西保留INFO。 但這只是我的偏好。

會有性能受到打擊。 必須寫入日志文件,並且任何I / O都是性能問題。

我個人使用反射來做類似的事情,但是這會對性能產生影響。 您可能希望使用一個反射方法來實現它,該方法將前一個項目放在堆棧上並從中進行描述。 然后你可以從任何地方打電話。

完成后,您可以運行探查器並優化真正導致性能問題的位置。

這是我為PropertyChanged做的事情。 (記得性能打擊)

    public string Name
    {
        get { return _Name ?? string.Empty; }
        set
        {
            _Name = value;
            NotifyPropertyChange(MethodBase.GetCurrentMethod());
        }
    }

    private void NotifyPropertyChange(MemberInfo info)
    {
        NotifyPropertyChange(info.Name.Replace("set_", string.Empty));
    }

    private void NotifyPropertyChange(string property)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(property));
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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