我正在玩Rails的日誌記錄,我注意到了一件奇怪的事情。
我最初試圖理解的問題是ActiveRecord如何將日誌SQL查詢記錄到控制檯。Rails.logger神祕的行爲
irb(main):001:0> Message.last
Message Load (7.4ms) SELECT "messages".* FROM "messages" ORDER BY "messages"."id" DESC LIMIT 1
我發現輸出是here。 但我不明白怎麼做ActiveRecord::Base.logger#debug
打印既STDOUT
和log/development.log
?
創建新的Rails 5.0.2應用程序並運行控制檯。
然後我做
irb(main):001:0> Rails.logger.debug 'foo bar'
foo bar
=> true
我得到foo的酒吧文本都在控制檯和log/development.log
文件。
Rails.logger
看起來像這樣
#<ActiveSupport::Logger:0x007f9545860150 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x007f9545860088 @datetime_format=nil>, @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x007f95430b7d10 @datetime_format=nil, @thread_key="activesupport_tagged_logging_tags:70139525840520">, @logdev=#<Logger::LogDevice:0x007f9545861820 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<File:/Users/aleksey/projects/test-logger/log/development.log>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f9545863080>>, @local_levels=#<Concurrent::Map:0x007f9545893de8 entries=0 default_proc=nil>>
但如果我創建自定義記錄器,我只在日誌文件中獲取文本
irb(main):005:0* logger = ActiveSupport::Logger.new('log/development.log')
=> #<ActiveSupport::Logger:0x007f9543411588 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x007f9543411510 @datetime_format=nil>, @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x007f9543411330 @datetime_format=nil>, @logdev=#<Logger::LogDevice:0x007f95434114c0 @shift_size=1048576, @shift_age=0, @filename="log/development.log", @dev=#<File:log/development.log>, @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f9543411448>>, @local_levels=#<Concurrent::Map:0x007f9543411290 entries=0 default_proc=nil>>
irb(main):006:0> logger.debug 'foo bar'
=> true
我沒有看到除了@thread_key
Rails.logger
和自定義記錄相差太多在格式化程序中(因爲我可以看到它來自ActiveSupport::TaggedLogging
,我不認爲它與問題有關)。
有誰知道問題在哪裏?我錯過了什麼?
同樣的事情發生在Rails 4.2.8了。
我的Rails 4.2.8應用程序上運行的MongoDB(與mongoid寶石),有Rails.logger.debug('foo bar')
打印只在日誌文件中。
它讓我覺得整個事情與ActiveRecord有某種關係。
是這樣嗎?
謝謝。