将日志文件(* .txt)转换为Web友好文件(* .html,* .jsp等)的最佳方法?

时间:2010-03-12 19:13:36

标签: html perl jsp scripting

我有一堆纯文本的日志文件。这是一个例子...

Overall Failures Log
SW Failures - 03.09.2010 - /logs/swfailures.txt - 23 errors - 24 warnings
HW Failures - 03.09.2010 - /logs/hwfailures.txt - 42 errors - 25 warnings
SW Failures - 03.10.2010 - /logs/swfailures.txt - 32 errors - 27 warnings
HW Failures - 03.10.2010 - /logs/hwfailures.txt - 11 errors - 31 warnings

这些文件可能会变得非常大并且包含许多其他信息。我想从这个日志中生成一个HTML文件,它将添加指向关键部分的链接,并允许用户打开其他日志文件......

SW Failures - 03.09.2010 - <a href="/logs/swfailures.txt">/logs/swfailures.txt</a> - 23 errors - 24 warnings

由于我想添加更多链接和其他html元素,因此大大简化了。我的问题是 - 最好的方法是什么?如果文件很大,我应该在向用户提供之前生成html还是jsp呢?我应该使用perl或其他脚本语言来执行此操作吗?你有什么想法和经历?

4 个答案:

答案 0 :(得分:4)

以下是使用Perl的HTML::Template

的简单示例
#!/usr/bin/perl

use strict; use warnings;
use HTML::Template;

my $tmpl = HTML::Template->new(scalarref => \ <<EOTMPL
<!DOCTYPE HTML>
<html><head><title>HTMLized Log</title>
<style type="text/css">
#log li { font-family: "Courier New" }
.errors { background:yellow; color:red }
.warnings { background:#3cf; color:blue }
</style>
</head><body>
<ol id="log">
<TMPL_LOOP LOG>
<li><span class="type"><TMPL_VAR TYPE></span>
<span class="date"><TMPL_VAR DATE></span>
<a href="<TMPL_VAR FILE>"><TMPL_VAR FILE></a>
<span class="errors"><TMPL_VAR ERRORS></span>
<span class="warnings"><TMPL_VAR WARNINGS></span>
</li>
</TMPL_LOOP>
</ol></body></html>
EOTMPL
);

my @log;
my @fields = qw( TYPE DATE FILE ERRORS WARNINGS );

while ( my $entry = <DATA> ) {
    chomp $entry;
    last unless $entry =~ /\S/;
    my %entry;
    @entry{ @fields } = split / - /, $entry;
    push @log, \%entry;
}

$tmpl->param(LOG => \@log);
print $tmpl->output;

__DATA__
SW Failures - 03.09.2010 - /logs/swfailures.txt - 23 errors - 24 warnings
HW Failures - 03.09.2010 - /logs/hwfailures.txt - 42 errors - 25 warnings
SW Failures - 03.10.2010 - /logs/swfailures.txt - 32 errors - 27 warnings
HW Failures - 03.10.2010 - /logs/hwfailures.txt - 11 errors - 31 warnings

答案 1 :(得分:2)

我喜欢awk,因为它有自动字段解析功能:

/failures.txt/ {
        $6="<a href=\"" $6 "\">" $6 "</a><br>"
}

{
        print
}

答案 2 :(得分:1)

我使用python正则表达式。

>>> import re
>>> a = re.compile(r'[SH]W Failures - \d\d.\d\d.\d\d\d\d - (.*) - \d+ errors -
\d+ warnings')
>>> str = 'SW Failures - 03.09.2010 - /logs/swfailures.txt - 23 errors - 24 warnings'  
>>> b = a.match(str)
>>> b
<_sre.SRE_Match object at 0x7ff34160>
>>> b.groups()
('/logs/swfailures.txt',)
>>> str.replace(b.group(1), '<a href="%s">%s</a>' % (b.group(1), b.group(1)))
'SW Failures - 03.09.2010 - <a href="/logs/swfailures.txt">/logs/swfailures.txt</a> - 23 errors - 24 warnings'

答案 3 :(得分:0)

pygmentize可以处理某些格式,但在大多数情况下你可能需要为自定义词法分析器添加。