الانتاج سسلوغ على سبيل المثال log4r
سؤال
ويمكن لبعض وظيفة واحدة مثال باستخدام outputter سسلوغ لlog4r، وأنا حاليا باستخدام المعياري ولكن نريد لتسجيل إلى سجل النظام.
mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."
وراج
والشكر أيضا إلى الوظائف التالية بلوق.
المحلول
ونوع من عرجاء الرد على سؤالي الخاصة، ولكنني وجدت الإجابة على هذا وإضافته لعمليات البحث في وقت لاحق.
لسبب ما أنا في حاجة إلى تتطلب log4r / outputter / syslogoutputter صراحة البعض SyslogOutputter الحكمة من شأنها أن تسبب "SyslogOutputter ثابت (NameError) غير مهيأ" خطأ. لا يبدو outputters البعض لديهم هذه المشكلة.
require 'rubygems'
require 'log4r'
require 'log4r/outputter/syslogoutputter'
mylog = Logger.new 'mylog'
mylog.outputters = SyslogOutputter.new("f1", :ident => "myscript")
mylog.info "Starting up."
وراج
نصائح أخرى
ولقد وجدت هذا مفيدا للغاية، ولكن كان لي لتقديم مزيد من التعديلات. هناك شيء ما حاول إعادة فتح سجل النظام، مما تسبب في RuntimeError غير معالج. I ثابتة مع هذا التجاوز الفأس مجنون في بيئات / production.rb:
require 'rubygems'
require 'log4r'
require 'log4r/outputter/syslogoutputter'
# The outputter needs some love to avoid attempts to reopen syslog. Most of this is cargo-culted from source.
class Log4r::SyslogOutputter
def initialize(_name, hash={})
super(_name, hash)
ident = (hash[:ident] or hash['ident'] or _name)
logopt = (hash[:logopt] or hash['logopt'] or LOG_PID | LOG_CONS).to_i
facility = (hash[:facility] or hash['facility'] or LOG_USER).to_i
if Syslog.opened? then
@syslog = Syslog
else
@syslog = Syslog.open(ident, logopt, facility)
end
end
end
RAILS_DEFAULT_LOGGER = Log4r::Logger.new 'mylog'
config.logger = RAILS_DEFAULT_LOGGER
config.logger.outputters = Log4r::SyslogOutputter.new("f1", :ident=>"RoR")
config.logger.info "Starting up."
وهناك ربما بطريقة أجمل بكثير من فعل ذلك، ولكن هذا ما يبدو للقيام بذلك بالنسبة لي.