我正在玩Rails登录,我发现了一件奇怪的事 我最初试图理解的一个问题是ActiveRecord如何将SQL查询记录到控制台。
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
我在控制台和log/development.log
文件中都有 foo bar 文字。
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
我在Rails.logger
和自定义记录器之间没有看到太多差异,格式化程序除了@thread_key
(因为我可以看到它来自ActiveSupport::TaggedLogging
,我认为它没有什么处理问题)。
有谁知道问题出在哪里?我缺少什么?
同样的事情也发生在Rails 4.2.8上
我在MongoDB上运行Rails 4.2.8应用程序(带有mongoid gem),Rails.logger.debug('foo bar')
在日志文件中打印 。
这让我觉得整件事与ActiveRecord有某种联系
是这样吗?
谢谢。