Ich entwickle ein Skript mit einer großen Hauptfunktion, die ich in mehrere Module aufgeteilt habe. Was ich brauche, ist Zugriff auf die Protokollfunktionalität von allen, das bedeutet, dass die Protokolldatei nur einmal geöffnet werden muss und der Zugriff freigegeben werden muss. DieseWie definiert man eine gemeinsame Modulprotokollierung unter anderen Modul
ist, was ich habe:
require 'module_1'
require 'module_2'
require 'module_3'
module Main
Module_1.Function_startup()
Module_2.Function_configuration()
Module_3.Function_self_test()
end
Hier wird das verschmutzte Modul für den Logger ist ich in allen anderen Modulen zur Verfügung benötigen. Idealerweise würde ich es als "logger.error" bezeichnen, wobei "logger" die Instanz des Loggers zurückgibt und "error" der Funktionsaufruf bei rlogger als rlogger.error ist.
require 'logger'
module Logging
@rlogger = nil
def init_logger
if @rlogger.nil?
puts "initializing logger"
file_path = File.join(File.dirname(__FILE__), 'checker.log')
open_mode = File::TRUNC# or File::APPEND
file = File.open(file_path, File::WRONLY | open_mode)
@rlogger = Logger.new(file)
@rlogger.datetime_format = "%Y-%m-%d %H:%M:%S"
@rlogger.formatter = proc do |severity, datetime, progname, msg|
con_msg = ""
if msg.match("ERROR:")
con_msg = msg.color(:red)
elsif msg.match("OK!")
con_msg = msg.color(:green)
else
con_msg = msg
end
puts ">>>#{con_msg}"
# notice that the colors introduce extra non-printable characters
# which are not nice in the log file.
"#{datetime}: #{msg}\n"
end
# Here is the first log entry
@rlogger.info('Initialize') {"#{Time.new.strftime("%H-%M-%S")}: Checker v#{@version}"}
end
end
# returns the logger
def logger
if @rlogger.nil?
puts "requesting nil rlogger"
end
@rlogger
end
end
end