Log4r: наследование логгера, конфигурация yaml, альтернативы? - PullRequest
4 голосов
/ 18 мая 2010

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

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

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

1 Logger Inheritance

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

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

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

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

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

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

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

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

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

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

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

3 Подстановка переменных в XML-файл

Q3 : Система конфигурации Yaml, похоже, предоставляет такую ​​возможность, однако мне не удалось найти аналогичную функцию с файлами XML. Есть идеи?

4 варианта?

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

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

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

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

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

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

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

С уважением,

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

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

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

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

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 
0 голосов
/ 19 мая 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.

...