2017-04-04 57 views
0

我正在玩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打印既STDOUTlog/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_keyRails.logger和自定義記錄相差太多在格式化程序中(因爲我可以看到它來自ActiveSupport::TaggedLogging,我不認爲它與問題有關)。

有誰知道問題在哪裏?我錯過了什麼?

同樣的事情發生在Rails 4.2.8了。
我的Rails 4.2.8應用程序上運行的MongoDB(與mongoid寶石),有Rails.logger.debug('foo bar')打印在日誌文件中。
它讓我覺得整個事情與ActiveRecord有某種關係。
是這樣嗎?

謝謝。

回答

0

似乎它確實涉及到ActiveRecord。
我發現this railtie代碼,添加日誌廣播到STDOUT