爲了幫助跟蹤出於調試目的的用戶操作,我們正在考慮將會話的登錄用戶標識添加到每條日誌消息(適用時)。我們的棧由Rails和Authlogic組成。我嘗試了幾條不同的路線,但迄今爲止都沒有成功。將用戶標識添加到Rails中的所有日誌消息
由於Authlogic不會以會話數據中的純文本格式存儲用戶ID,我們必須等待它被初始化。只有在初始化ApplicationController並將其設置爲活動的Authlogic控制器後,纔會發生這種情況。因此,我們不能依賴config/application.rb
中的代碼。在我看來,唯一的解決辦法是在稍後換出記錄器。
我已經嘗試通過繼承記錄器和覆蓋add()
方法創建一個新的記錄器類:
class UserLogger < Logger
def add(severity, message = nil, progname = nil, &block)
begin
session = UserSession.find
rescue
return super(severity, message, progname, &block)
end
user = session.user if session
if block_given? || !user
return super(severity, message, progname, &block)
end
unless message.nil?
message = "[#{user.id}] " + message
end
super severity, message, progname, &block
end
end
這似乎並不會對日誌前哨不得以任何影響。我也嘗試過使用TaggedLogging,但是這似乎不是一個好的解決方案,因爲你必須在塊中拋出任何標記代碼。
我也嘗試在應用程序配置中定義config.log_tags
,通過給它一個Proc,但Authlogic拋出了相同的Authlogic::Session::Activation::NotActivatedError
異常。試圖捕捉這個異常將Ruby變成了一個非常奇怪的狀態,似乎是某個地方的無限循環,並將我的CPU以100%的比率掛起來。
有沒有簡單的解決方案,或者我完全失蹤?