Ich spielte mit Rails einloggen und ich habe eine seltsame Sache bemerkt.
Eine Frage, die ich zuerst versuchte zu verstehen, war, wie ActiveRecord SQL-Abfragen zur Konsole loggen.Rails.logger mystisches Verhalten
irb(main):001:0> Message.last
Message Load (7.4ms) SELECT "messages".* FROM "messages" ORDER BY "messages"."id" DESC LIMIT 1
Ich fand, dass die Ausgabe here gemacht wird. Aber ich kann nicht verstehen, wie ActiveRecord::Base.logger#debug
beide auf STDOUT
und log/development.log
drucken?
Ich neue Rails 5.0.2-Anwendung erstellen und Konsole ausführen.
Dann mache ich
irb(main):001:0> Rails.logger.debug 'foo bar'
foo bar
=> true
ich foo bar Text sowohl in der Konsole und log/development.log
Datei.
Rails.logger
sieht aus wie dieses
#<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>>
Aber wenn ich benutzerdefinierte Logger erstelle ich Text bekommen nur in Protokolldatei
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
ich nicht zu viel Unterschied zwischen Rails.logger
und benutzerdefinierte Logger sehen außer @thread_key
im Formatierer (wie ich sehen kann, kommt es von ActiveSupport::TaggedLogging
, ich denke nicht, dass es etwas mit dem Problem zu tun hat).
Weiß jemand wo ist das Problem? Was ich vermisse?
Das Gleiche passiert auch mit Rails 4.2.8.
Ich habe Rails 4.2.8 Anwendung läuft auf MongoDB (mit Mongoid Edelstein) und dort Rails.logger.debug('foo bar')
Drucke nur in der Protokolldatei.
Es lässt mich denken, dass das Ganze irgendwie ActiveRecord verwandt ist.
Ist es so?
Vielen Dank.