Как справиться с этой ситуацией в Perl - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть INI-файл конфигурации для хранения всей конфигурации, необходимой для запуска моего скрипта. У меня есть Logger.PM, который использует Log4Perl, и ConfigReader.PM, который читает файл INI и сохраняет значение в глобальной переменной. Мой Start.PL - это точка входа, где я вызываю методы из Logger и configreader.

Что я делаю сейчас

  1. В Start.PL я жестко закодировал путь к файлу INI
  2. В Logger.Pm я прописал имя каталога, в котором должны храниться файлы журнала

Что я хочу

  1. Я хочу, чтобы путь к файлу INI был настраиваемым
  2. Я хочу, чтобы путь к папке журнала был взят из файла INI

Я мог бы сделать это, выполнив

  1. Передать путь файла INI в качестве параметра в start.pl
  2. Прочитать INI-файл и получить путь к папке из INI-файла

С чем я мог бы столкнуться, так это с

  1. Я не могу использовать Logger.PM в ConfigReader (частично), так как Имя папки, необходимое для регистратора, является частью файла INI

Я хочу регистрировать каждый шаг моего скрипта (для целей регистрации / отладки в случае сбоя.) Я могу использовать print, но это запишет на консоль и для захвата мне нужно использовать >> log.txt. Тогда я буду вынужден поддерживать 2 журнала для моего приложения, а это не то, что я хотел

У кого-нибудь есть хорошее решение для этого сценария?

1 Ответ

0 голосов
/ 28 сентября 2011

Вы можете передать путь к файлу INI в командной строке, используя Getopt :: Long , и переключатели командной строки для istance:

Start.pl --ini=/path/to/INI_file

Вот пример кода, чтобы показать, какие изменениянеобходим в Start.pl, чтобы иметь переключатели:

#!/usr/bin/env perl

use v5.12;
use strict;

use Getopt::Long;

# That little tiny 's' after 'ini=' is for string
GetOptions ( 'ini=s' => \my $ini_file );

say $ini_file;

После этого изменения вы можете прочитать все параметры из вашего INI-файла, включая путь к папке журнала (вы уже используете модуль для управления INI-файламикак Config :: IniFiles ?).

В вашем вопросе по поводу print есть еще что-то неясное: хотя один из моих мастеров сказал, что печать с парой квадратных скобок - лучшийотладчик в мире, зачем использовать print, когда вы настроили Log::Log4perl?

Когда вы говорите, что Logger.PL не может быть использован в ConfigReader, вы ссылаетесь на объект журнала?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...