سؤال

ويمكن لبعض وظيفة واحدة مثال باستخدام outputter سسلوغ لlog4r، وأنا حاليا باستخدام المعياري ولكن نريد لتسجيل إلى سجل النظام.

mylog = Logger.new 'mylog'
mylog.outputters = Outputter.stdout
mylog.info "Starting up."

وراج


والشكر أيضا إلى الوظائف التالية بلوق.

بلوق Angrez ل: Log4r - الاستخدام وأمثلة

ProgrammingStuff: Log4r

هل كانت مفيدة؟

المحلول

ونوع من عرجاء الرد على سؤالي الخاصة، ولكنني وجدت الإجابة على هذا وإضافته لعمليات البحث في وقت لاحق.

لسبب ما أنا في حاجة إلى تتطلب 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."

وهناك ربما بطريقة أجمل بكثير من فعل ذلك، ولكن هذا ما يبدو للقيام بذلك بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top