Просмотр содержимого файла журнала Log::Log4perl во время работы регистратора

Я создаю клиент-серверное приложение с Perl/Mojolicious и JQuery. Сервер создает файл журнала, используя Log::Log4perl, и отправляет имя файла журнала обратно клиенту, чтобы клиент мог видеть ход выполнения. В клиенте я использую обычную ссылку HTML A на файл журнала как:

<a href="logs/blabla.log">See log file</a>

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

Я настроил Log::Log4perl на автоматическую очистку и попытался использовать log4perl.appender.Syncer и даже установить буфер на 0 или 1: log4perl.appender.Buffer, но ничего не помогло — моя конфигурация Log::Log4perl такова:

log4perl.appender.myFILE          = Log::Log4perl::Appender::File
    log4perl.appender.myFILE.filename =  $logfile_name
    log4perl.appender.myFILE.create_at_logtime = 1
    log4perl.appender.myFILE.mode = write
    log4perl.appender.myFILE.autoflush = 1
    log4perl.appender.myFILE.umask    = 0000,
    log4perl.appender.myFILE.layout   = Log::Log4perl::Layout::PatternLayout
    log4perl.appender.myFILE.layout.ConversionPattern = [%p][%d{HH:mm}: %m%n

Как я могу увидеть содержимое файла журнала, когда сервер его обновляет? Большое спасибо и хорошей недели,

Сейф.


person iseif    schedule 05.12.2013    source источник


Ответы (1)


Я просто предполагаю с этим небольшим количеством информации. Пожалуйста, опубликуйте более подробную информацию, чтобы иметь возможность помочь вам. Без клиентского кода я не могу сказать, что не так.

Многие файловые приложения Log::Log4perl имеют возможность включать/выключать буферизацию. Отключите буферизацию, может поможет.

Если я правильно понимаю ваш пример, то он не назначает приложение какому-либо уровню журнала или модулю.

Вы можете попробовать это:

# log config
my $log4perl_conf = qq(     
    log4perl.rootLogger                   = INFO,MyFILE 
    log4perl.appender.myFILE          = Log::Log4perl::Appender::File
    log4perl.appender.myFILE.filename =  $logfile_name
    log4perl.appender.myFILE.create_at_logtime = 1
    log4perl.appender.myFILE.mode = append
    log4perl.appender.myFILE.autoflush = 1
    log4perl.appender.myFILE.umask    = 0222,
    log4perl.appender.myFILE.layout   = Log::Log4perl::Layout::PatternLayout
    log4perl.appender.myFILE.layout.ConversionPattern = [%p][%d{HH:mm}: %m%n
    log4perl.appender.myFILE.header_text = "#Log file created!"
);  
# Initialize logging
Log::Log4perl->init_once( \$log4perl_conf );    
$Log::Log4perl::JOIN_MSG_ARRAY_CHAR=' '; 
my $logger = get_logger(__PACKAGE__);
$logger->info("test! $$");
person user1126070    schedule 05.12.2013
comment
В клиенте я просто добавляю обычную ссылку на файл например: ‹a href=logs/blabla.lof›Посмотреть лог-файл‹/a› - person iseif; 05.12.2013
comment
На стороне сервера у меня есть: log4perl.appender.myFILE = Log::Log4perl::Appender::File log4perl.appender.myFILE.filename = $logfile_name log4perl.appender.myFILE.create_at_logtime = 1 log4perl.appender.myFILE.mode = запись log4perl.appender.myFILE.autoflush = 1 log4perl.appender.myFILE.syswrite = 1 log4perl.appender.myFILE.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.myFILE.layout.ConversionPattern = [%p ][%d{ЧЧ:мм}]: %m%n - person iseif; 05.12.2013
comment
log4perl.appender.Syncer = Log::Log4perl::Appender::Synchronized log4perl.appender.Syncer.appender = мой ФАЙЛ - person iseif; 05.12.2013