我將log4Net ADONetAppender設置爲一個名爲log的表。log4net%屬性在設置後變爲空
在Global.asax.cs文件的Application_Start()上配置log4net。
表和它的刀片是典型
INSERT INTO log ([PCDate],[Thread],[Level],[Logger],[Message],[Exception])
VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)
所有所不同的是,我已經把我的記錄器是當前登錄到系統中的應用程序用戶。
這在.config文件中。
<parameter>
<parameterName value="@logger"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{userName}"/>
</layout>
</parameter>
我在負責處理該類的用戶數據記錄的任何插入,更新或刪除之前執行日誌記錄。
logger.Info(strquery);
記錄器的消息是插入/更新或刪除查詢。 記錄器被設置爲當前應用程序記錄的用戶,例如鮑勃,灰等 在登錄和調試驗證,它被設置爲該值。
log4net.ThreadContext.Properties["userName"] = userName;
我也可以把上面的語句在每個ASP,最終會做插入/添加/刪除,但將是十分繁瑣,我們看12當前文件更何況,這是無法形成規模,能。
何處/爲什麼屬性值設置爲null後?
表中的記錄是這樣的
偉大的一點。但是,只有在login.aspx頁面上單擊登錄按鈕後,纔會設置該用戶名。我還不知道application_beginRequest的價值。或者我需要通過將它保存在會話中並在BeginREquest中檢查它來檢查它嗎? – devsahem
斯圖爾特,我用了GlobalContext。記錄器的值持續不爲空:) :)但是,我不確定是否全局跨所有用戶? [鏈接](https://logging.apache.org/log4net/release/manual/contexts.html)該鏈接描述了跨AppDomain(我不明白)如何使用globalcontext。這是否意味着它會影響其他用戶,並且每個最近記錄的用戶都會覆蓋此值?我需要另一臺機器來測試它。 – devsahem
是的,GlobalContext將只保存一個值,即最後一個登錄用戶的值。您之前在會話中保留用戶名並使用它填充ThreadContext的想法仍然有效。 – stuartd