Ruby On Rails in UA/Rails plugins и фичи/Расширенное логированеи с помощью log4r

10 июня 2008, 15:54
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2166
Рейтинг: 532.0
Рег: 13 марта 2007
Его блог
Расширенное логированеи с помощью log4r
  •  
Для начала инсталируем джем [root@bublik ~]# gem install --remote log4r complete Successfully installed log4r-1.0.5 1 gem installed Installing ri documentation for log4r-1.0.5... Installing RDoc documentation for log4r-1.0.5... Пимер подключения ДОбавляем следующие строки в environment.rb ######################################### require "log4r" require "log4r/configurator" include Log4r Log4r::Configurator.custom_levels("Info","Error","Access","Activity","Debug") class MyFormatter < Log4r::Formatter def format(event) buff = "The level is #{event.level} and has " buff += "name '#{Log4r::LNAMES[event.level]}'\n" buff += "The logger is '#{event.name}' " buff += "and the data type is #{event.data.class}\n" buff += "Let's inspect the data:\n" buff += event.data.inspect + "\n" # buff += "We were called at #{event.tracer[0]}\n\n" end end Log4r::FileOutputter.new('my_log', :filename=>"#{RAILS_ROOT}/log/mylog.log", :trunc=>false, :formatter=>MyFormatter) devel = Log4r::Logger.new("mylog") #devel.trace = true devel.add('my_log') production = Log4r::Logger.new("prod") production.add('my_log') devel.info("User logged in") devel.access("User logged in") devel.error("User logged in") devel.debug("User logged in") production.info("User logged in") production.access("User logged in") production.error("User logged in") production.debug("User logged in") Вот пример того что мы получим http://log4r.sourceforge.net/ http://www.pigstye.net/articles/2007/02/01/log4r-and-rails http://www.martyandrews.net/blog/2007/09/logging_in_ruby_on_rails.html http://wiki.rubyonrails.org/rails/pages/HowtoConfigureLogging
------------
Операции с WM | SEO консультации
08 июня 2008, 23:18
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2166
Рейтинг: 532.0
Рег: 13 марта 2007
Его блог
RE: Расширенное логированеи с помощью log4r
  •  
Добавляем в в начало файла envoronment.rb require "log4r" include Log4r Добавляем в development.rb formatter = Log4r::PatternFormatter.new(:pattern => "[%l][%c] (%d) | %M |") Log4r::StderrOutputter.new('console', :formatter => formatter) Log4r::FileOutputter.new('devel_log', :filename=>"#{RAILS_ROOT}/log/development.log", :trunc=>false, :formatter => formatter) Log4r::Logger.new('App').add('console') Log4r::Logger.new('App').add('devel_log') RAILS_DEFAULT_LOGGER = Log4r::Logger.new('App::Rails') В результате получим красивый лог [DEBUG][Rails] (2008-03-04 16:13:35) | SQL (0.001283) SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = 'products'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum |
------------
Операции с WM | SEO консультации
10 июня 2008, 15:30
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2166
Рейтинг: 532.0
Рег: 13 марта 2007
Его блог
No such file to load -- log4r
  •  
При попытке запустить тесты возникла следующая проблемма wr@bublik trunk]$ ruby test/unit/trustconnect_log_test.rb /home/wr/****/trunk/config/environment.rb:6:in `require': no such file to load -- log4r (LoadError) from /home/wr/comodo/comodo_sasp/trunk/config/environment.rb:6 from ./test/unit/../test_helper.rb:2:in `require' from ./test/unit/../test_helper.rb:2 from test/unit/trustconnect_log_test.rb:1:in `require' from test/unit/trustconnect_log_test.rb:1 Оказывается для запуска тектов надо добавить еще загрузку джемов /environment.rb require 'rubygems' require "log4r" include Log4r
------------
Операции с WM | SEO консультации
,
10 июня 2008, 10:56
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2166
Рейтинг: 532.0
Рег: 13 марта 2007
Его блог
RE: Расширенное логированеи с помощью log4r
  •  
Выше приведенные конфига показали что существует проблемма при запуске script/console По этому нашелся интересный вараинт решения Добавляем файла в директорию конфигов и вызываем его в script/server require File.join(File.dirname(__FILE__), 'boot') require File.expand_path(File.dirname(__FILE__) + "/logger") файлы которые надо добавить приатачены
------------
Операции с WM | SEO консультации
Присоединенные: log4r_rails.zip
10 июня 2008, 03:42
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2166
Рейтинг: 532.0
Рег: 13 марта 2007
Его блог
Rails loggger formatter
  •  
5.0 из 1 гол.
Борьба с логером не закончилась на этом. Как показало тестовое использование log4r, сто он не на столько совершенен чтобы его использовать на все 100% в продакшине, по сему было принято решение сделать маленький хак для стандартного логера, для получения желаемого вида логов. logger for rails 1.2.x < 2.0 Вынесем наш хак во внешний файл, для просторы миграции в другие приложения или его отключения. #app/lib/logger_core_ext.rb' ###################################### #Для использования добавляем в app/config/enviromnent.rb следующие строки #require 'logger_core_ext' #RAILS_DEFAULT_LOGGER.formatter = Logger::CustomFormatter.new ###################################### class Logger #revert rails logger hack alias format_message old_format_message class CustomFormatter < Formatter def call(severity, time, progname, msg) "[%s|#%5d|%s] %s| %s\n" % [severity[0..3], $$, time.to_s(:db), progname, msg2str(msg)] end end end #app/config/enviromnent.rb require 'logger_core_ext' RAILS_DEFAULT_LOGGER.formatter = Logger::CustomFormatter.new Добавим для тестового просмотра вида нашего лога в application.rb class ApplicationController < ActionController::Base before_filter :showlog def showlog logger.debug('debug from log'){ "Received connection from" } logger.info('info from log') logger.info("MainApp"){ "Received connection from" } logger.warn('warn from log') logger.error('error from log') logger.fatal('fatal from log') end end Как результат в наших логах прекрасные и понятные записи. Processing MessagesController#show (for 127.0.0.1 at 2008-03-11 11:35:48) [GET] [INFO|# 5584|2008-03-11 11:35:48] | Session ID: 7e022c9982f2d317480f10f104c92407 [INFO|# 5584|2008-03-11 11:35:48] | Parameters: {"action"=>"show", "id"=>"14", "controller"=>"messages"} [DEBU|# 5584|2008-03-11 11:35:48] | [Set SUBDOMAIN] - [DEBU|# 5584|2008-03-11 11:35:48] debug from log| Received connection from [INFO|# 5584|2008-03-11 11:35:48] | info from log [INFO|# 5584|2008-03-11 11:35:48] MainApp| Received connection from [WARN|# 5584|2008-03-11 11:35:48] | warn from log [ERRO|# 5584|2008-03-11 11:35:48] | error from log [FATA|# 5584|2008-03-11 11:35:48] | fatal from log [DEBU|# 5584|2008-03-11 11:35:48] | Message Columns (0.000000) SHOW FIELDS FROM messages [DEBU|# 5584|2008-03-11 11:35:48] | Message Load (0.000000) SELECT * FROM messages WHERE (messages.`id` = 14) [DEBU|# 5584|2008-03-11 11:35:48] | Message Load (0.010000) SELECT * FROM messages WHERE (messages.`id` = 14)
------------
Операции с WM | SEO консультации
,
10 июня 2008, 08:05
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2166
Рейтинг: 532.0
Рег: 13 марта 2007
Его блог
pretty logs for rails 1.2 and 2.0
  •  
Вызов логера с блоком logger.debug('debug from log'){ "Received connection from" } logger.info('info from log') logger.info("MainApp"){ "Received connection from" } rails 1.2.6 [DEBU|# 5880|2008-03-11 16:07:47] debug from log: Received connection fr [INFO|# 5880|2008-03-11 16:07:47] : info from log [INFO|# 5880|2008-03-11 16:07:47] MainApp: Received connection from rails 2.0.2 [DEBU|# 5880|2008-03-11 16:07:47] debug from log [INFO|# 5880|2008-03-11 16:07:47] : info from log [INFO|# 5880|2008-03-11 16:07:47] MainApp И так после путем долгий патчей получилась такая версия которая работает с обеими версиями rails 1.2x and 2.0 и так подключаем app/config/environment.rb Rails::Initializer.run do |config| .... end require 'logger_core_ext' Содержимое app/lib/logger_core_ext.rb =begin ====app/config/environment.rb require 'logger_core_ext' =end class Logger # Used for rails 1.2.x alias format_message old_format_message class Formatter def call(severity, time, progname, msg) "[%s|#%5d|%s] %s: %s\n" % [severity[0..3], $$, time.to_s(:db), progname, msg2str(msg)] end end end module ActiveSupport # Used for rails 2.0 class BufferedLogger module Severity def level_to_s(level) case level when 0 'DEBUG' when 1 'INFO' when 2 'WARN' when 3 'ERROR' when 4 'FATAL' when 5 'UNKNOWN' end end end def add(severity, message = nil, progname = nil, &block) return if @level > severity # message = (message || (block && block.call) || progname).to_s message = (message || (block && block.call) || progname).to_s # If a newline is necessary then create a new message ending with a newline. # Ensures that the original message is not mutated. message = "#{message}\n" unless message[-1] == ?\n message = "[%s|#%5d|%s] %s: %s" % [level_to_s(severity)[0..3], $$, Time.now.to_s(:db), progname, message] @buffer << message auto_flush message end end end
------------
Операции с WM | SEO консультации
, ,

Гости: 102 Онлайн: 0