2010-02-26 31 views

回答

0

我想通了,對於commandText爲AdoNetAppender我命令文本設置爲:

<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception); DELETE FROM [Log] WHERE [Date] &lt; DATEADD(dd, -28, GETDATE())" /> 

感覺哈克,但它的作品。我會在這裏發佈,如果我找到一個整潔的解決方案。

+2

大聲笑,想到這一點,但認爲我不會建議。由於它會將更多負載加入日誌記錄過程,因此我會在單獨的進程中進行帶外刪除。 – 2010-02-26 14:25:04

+0

作爲一般原則,我認爲你是對的,但由於我們的日誌記錄大部分將會相當低,我認爲這是一個可以接受的開銷。如果我錯了,我們可以把它拉出來並使用你的建議。 – ilivewithian 2010-02-26 14:55:59

+0

這樣做是不對的。特別是考慮寫一個sql作業有多容易。 – Roubachof 2013-07-22 09:51:16

2

Log4net沒有內置此功能。但這樣的任務可能最適合作爲一項工作,例如。在SSIS中(如果您正在運行MS SQL Server)或類似的工具。

0

我知道我遲到了......但看着ilivewithian的解決方案,我會同意Peter Lillevold的觀察,認爲它會導致記錄過程中的額外負載是不可取的。

在數據庫中使用觸發器是否可以自動刪除舊項目?當然,你需要一個支持觸發器的數據庫,但它看起來像大多數現代的(包括像SQLite和PostgreSQL這樣的開放源碼的)。

相關問題