【问题标题】:View content of Log::Log4perl log file while logger is running在记录器运行时查看 Log::Log4perl 日志文件的内容
【发布时间】:2013-12-05 09:46:12
【问题描述】:

我正在使用 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

如何在服务器更新日志文件时查看它的内容? 非常感谢,祝您度过愉快的一周,

赛夫。

【问题讨论】:

    标签: jquery perl mojolicious log4perl


    【解决方案1】:

    我只是在猜测这少量的信息。请发布更多详细信息,以便为您提供帮助。没有客户端代码,我无法判断出什么问题。

    许多基于文件的 Log::Log4perl appender 都有打开/关闭缓冲的选项。关闭缓冲,它可能会有所帮助。

    如果我没看错您的示例,那么它不会将附加程序分配给任何日志级别或模块。

    你可以试试这个:

    # 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! $$");
    

    【讨论】:

    • 在客户端我只是添加一个常规链接到文件例如:查看日志文件
    • 在服务器端我有: 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{HH:mm}]: %m%n
    • log4perl.appender.Syncer = Log::Log4perl::Appender::Synchronized log4perl.appender.Syncer.appender = myFILE