2012-01-18 73 views
0

我知道如何配置NHibernate和log4net來記錄我的查詢的結果SQL。但是,是否可以僅記錄特定查詢(例如,在LINQ查詢之前激活記錄活動並在查詢之後立即將其停用)?記錄特定的NHibernate SQL查詢

回答

2

您可以以編程方式將appender添加到log4net的實例並將其移除。所以你可以做的是,當你點擊你想要記錄的查詢時,以編程方式添加一個新的appender,運行查詢,然後以編程方式刪除appender。我沒有測試過這個,但我認爲這應該是可能的。

Here is a reference如何以編程方式添加appenders。

+0

謝謝。在你看來,是否只有記錄特定(複雜)查詢的正確方法? – StockBreak 2012-01-18 20:03:21

+0

是的,這是我嘗試這樣做的方式。您應該能夠以編程方式打開所需的日誌記錄,執行您的查詢,然後關閉日誌記錄。我非常肯定沿着這條線將會發揮作用;然而,我沒有親自親自測試過。 – 2012-01-18 20:11:42

+0

這將導致併發會話的查詢順便記錄。但我不認爲如果OP想要使用NHibernate內置日誌記錄,而不是一些自定義的日誌,可以使用其他解決方案。 – 2017-07-16 19:08:07

0

您可以使用攔截器自己登錄SQL,在需要時啓用攔截器。

public class SqlLogInterceptor : EmptyInterceptor 
{ 
    private static readonly ILog _log = 
     LogManager.GetLogger(typeof(SqlLogInterceptor)); 

    public bool Enabled { get; set; } 

    public override SqlString OnPrepareStatement(SqlString sql) 
    { 
     // Adjust your log level as you see fit. 
     if (Enabled) 
      _log.Info(sql); 
     return sql; 
    }  
} 

當打開會話,提供攔截器的實例來OpenSession,並保持它的參考。

當您需要您的日誌記錄時,請設置其Enabled屬性。假設您只使用一個會話使用攔截器實例,則它將只記錄該會話SQL。

此解決方案不會記錄參數值。