Log4r: наследование регистратора, конфигурация yaml, альтернативы?

Я новичок в средах ruby, и я искал хорошую структуру ведения журнала, чтобы использовать ее в своих приложениях ruby ​​и rails.

В моем предыдущем опыте я успешно использовал log4j и log4p (порт perl) и ожидал того же уровня удобства использования (и зрелости) от log4r.

Однако я должен сказать, что есть ряд вещей, которые вообще не ясны во фреймворке log4r.

1 наследование регистратора

Похоже, что наследование регистратора вообще не управляется!

Если я объявлю регистратор с именем «myapp», а затем попытаюсь получить имя регистратора «myapp::engine», поиск завершится ошибкой NameError.

Я ожидаю, что фреймворк вернет корневой регистратор в соответствии со схемой именования и будет использовать регистратор myapp.

Q1: Конечно, я могу обойти это и управлять именами самостоятельно с помощью метода поиска, однако есть ли более чистый способ сделать это без дополнительного кодирования?

2 Конфигурация YAML

Второе, что меня смущает, это конфигурация yaml. На сайте log4r буквально нет информации об этой системе, doc ссылается на отсутствующие страницы, поэтому вся информация, которую я могу найти, содержится в каталоге примеров гема.

Меня очень смутил тот факт, что конфигурация yaml должна содержать раздел pre_config и что мне нужно определить свои собственные уровни.

Если я удалю секцию pre_config или заменю все «кастомные» уровни стандартными (отладка, информация, предупреждение, фатальный), пример выдаст следующую ошибку:

log4r/yamlconfigurator.rb:68:in `decode_yaml': Log level must be in 0..7 (ArgumentError)

Таким образом, похоже, нет способа использовать простой файл, в котором мы только объявляем регистраторы и приложения для фреймворка.

Вопрос 2: я действительно думаю, что что-то упустил, и это должен быть способ предоставить простой файл конфигурации yaml. У вас есть примеры такого использования?

3 замены переменных в файле XML

Вопрос 3. Похоже, что система конфигурации Yaml предоставляет такую ​​функцию, однако мне не удалось найти аналогичную функцию с XML-файлами. Любые идеи ?

4 варианта?

Должен сказать, что я очень разочарован уровнем возможностей и зрелостью log4r по сравнению с log4j и другими портами log4j.

Я столкнулся с этой структурой с солидным опытом ведения журналов API на других языках и обнаружил, что работаю во всех видах, просто чтобы «основные вещи» работали в «реальном приложении».

Под этим я подразумеваю сложное приложение, состоящее из нескольких гемов, консольных/сценарных приложений и веб-интерфейса rails, где конфигурация должна быть взаимной и где мы интенсивно используем пространства имен и наследование.

Я провел несколько поисков, чтобы найти что-то более подходящее или зрелое, но не нашел ничего похожего.

Q4. Ребята, знаете ли вы какие-нибудь (серьезные) альтернативы инфраструктуре log4r, которые можно было бы использовать в приложении корпоративного класса?

Спасибо, что прочитали все это!

Я был бы очень признателен за любые указатели,

С уважением,


person devlearn    schedule 18.05.2010    source источник


Ответы (2)


Я согласен с тем, что документация log4r довольно плохая. Однако мы используем его, и он служит нам очень хорошо, скажем, в корпоративном приложении.

Мы не используем наследование логгеров, поэтому я не могу вам с этим помочь, а также я не знаю ни о каких альтернативных программах, но:

Вот код, который мы используем для чтения конфигурации YAML (на самом деле, я думаю, мы передаем его как уже загруженный в хеш), он также поддерживает подстановку переменных:

require 'log4r'
require 'log4r/yamlconfigurator'

y = "log4r_config:

  # define all loggers ...
  loggers:
    - name      : production
      level     : INFO
      trace     : 'false'
      outputters:
        - stdout

  # define all outputters (incl. formatters)      
  outputters:
    - type     : StdoutOutputter
      name     : stdout
      formatter:
        date_pattern: '%Y-%m-%d %H:%M:%S'
        pattern     : '%d %l: #\{TEST\} %m '
        type        : PatternFormatter"

h = YAML.load y
log_cfg = YamlConfigurator
log_cfg['TEST'] = 'foobar'
log_cfg.decode_yaml h['log4r_config']
@log = Logger['production']
@log.info 'test'
#=>2010-05-20 14:36:32 INFO: foobar test 
person Mladen Jablanović    schedule 18.05.2010
comment
Привет, спасибо за ваш ответ, однако этот пример, похоже, не работает должным образом в нашей среде. Я получаю 'decode_yaml': неопределенный метод 'каждый' для nil: NilClass (NoMethodError)' при анализе файла yaml. Разбор файла или хэша дает точно такую ​​же ошибку... Вы используете версию 1.1.17 log4r? - person devlearn; 19.05.2010
comment
Я использую 1.0.6 в производстве. Чуть позже попробую и пришлю рабочий пример. - person Mladen Jablanović; 19.05.2010
comment
Я вставил пример прямо из irb. - person Mladen Jablanović; 20.05.2010
comment
Используя 1.1.7, приведенный выше код работает для меня, если я добавляю include Log4r сразу после второго require. См. эту суть. Кроме того, работает прекрасно, спасибо за этот отличный пример! - person Noah Sussman; 31.05.2010

Поскольку я все еще «борюсь» с конфигурацией yaml, я немного покопался в коде конфигурации XML и нашел ответ на Q3, касающийся подстановки параметров.

На самом деле это работает очень похоже на материал yaml, все, что вам нужно, это указать параметры с помощью #{VARNAME} в файле xml:

<filename>#{logdir}/processing.log</filename>

и установить их в конфигураторе перед чтением xml-файла:

Log4r::Configurator['logdir']=log_dir_param
...
Log4r::Configurator.load_xml_file(conf_file_xml)

Также, когда я упомянул, что документация log4r действительно в плохом состоянии (много ошибок 404), я говорил о документации, доступной на rubyforge...

В конце концов я посмотрел на проект sourceforge и нашел «хороший» (в рубиновом смысле) документ на http://log4r.sourceforge.net/rdoc.

person devlearn    schedule 19.05.2010
comment
Ссылка на sourceforge, которую вы упомянули, предназначена для Log4r 1.0.5. ОП использует 1.1.7. Чтобы просмотреть документацию по API для Log4r, скажите: gem server Затем перейдите на localhost:8808, и вы сможете прочитать документацию по API для установленные версии всех ваших драгоценных камней. - person Noah Sussman; 30.05.2010