У меня есть мозаичное веб-приложение, которое использует Log4perl для ведения журнала. Это многопользовательское приложение, и иногда бывает сложно следить за различными потоками в файле журнала, когда к приложению обращается более одного пользователя. Я бы хотел, чтобы каждый пользователь (население менее 25 пользователей) регистрировался в отдельном файле. Например. ./log/userX.log ./log/userY.log и т.д.Можно ли использовать Log4perl для создания файлов журнала пользователя?
Я думал об использовании что-то вроде этого в конфигурационном файле: log4perl.appender.MAIN.filename = юг {возвращение get_user_filename(); } , но регистратор определен в подпрограмме Mojolicious startup, и пользователь не известен до момента запроса.
Другая идея, которая кажется более перспективной, заключается в том, чтобы написать мост, который создает приложение для пользователя, а затем присваивает его регистратору. Затем я мог кэшировать приложение для последующего повторного использования (или уничтожить и воссоздать).
Я буду играть со вторым вариантом, но если кто-то попытался сделать это раньше и хочет поделиться своей мудростью, я был бы признателен.
- Update - Таким образом, в моем мосту маршрут я делаю следующее:
my $user = $self->req->headers->header('authuser'); # from apache
my $appender = Log::Log4perl::Appender->new(
'Log::Log4perl::Appender::File',
name => $user . "_file_appender",
filename => "/tmp/$user.log",
mode => "append",
);
$appender->layout($layout); # previously defined
$appender->level($loglevel); # again previously defined and omitted for brevity
Log::Log4perl::get_logger($user)->add_appender($appender);
$self->app->log(Log::Log4perl::get_logger($user));
Я получаю следующее сообщение об ошибке, однако:
Can't locate object method File:() in Log::Log4perl::Appender at /usr/local/share/perl/5.14.2/Log/Log4perl/Appender.pm line 282, <DATA> line 747.
/TMP/пользователя .log создается, хотя (нулевая длина). Последняя установка CPAN для журнала :: Log4perl. Есть идеи?
Рассматривали ли вы вход в DBI? Это упростит разделение/фильтрацию пользователем после события. –
Да, но я не использую базу данных DBI. (Я знаю, я мог выбирать из дюжины разных БД с разными модулями). Файлы - это мое желание, легко читаемое и легко манипулируемое. – Todd
Возможно, ваша ошибка связана с опечаткой. Он ищет «Файл:» в классе Appender. Предположительно, где-то написано «Файл». –