2010-05-18 2 views
4

Я довольно новичок в рубиновых средах, и я искал хорошую структуру ведения журнала, чтобы использовать ее для рубиновых и рельсовых приложений.Log4r: наследование logger, конфигурация yaml, альтернативы?

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

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

1 Logger Наследование

Наследование регистратор не кажется, удалось на всех!

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

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

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

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

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

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

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

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

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

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

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

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

4 Альтернативы?

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

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

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

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

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

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

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

Уважением,

ответ

2

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

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

Вот код, который мы используем для чтения конфигурации 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

Привет, спасибо за ваш ответ, однако этот пример не работает должным образом в нашей среде. Я получаю «decode_yaml»: undefined method 'each 'for nil: NilClass (NoMethodError)', когда анализируется файл yaml. Анализ файла или хэша дает ту же ошибку ... Используете ли вы версию 1.147 log4r? – devlearn

+1

Я использую 1.0.6 в производстве. Я попробую его немного позже и отправлю рабочий пример. –

+0

Я вставил пример прямо из irb. –

0

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

На самом деле он работает в очень похожим образом в YAML вещи, все, что вам нужно ссылаться на Params с # {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.

+0

Ссылка на источник, которую вы упомянули, для Log4r 1.0.5. ОП использует 1.1.7. Чтобы просмотреть документацию по API для Log4r, скажем: 'gem server' Затем перейдите по адресу http: // localhost: 8808, и вы можете прочитать документы API для установленных версий всех ваших драгоценных камней. –

Смежные вопросы