Jam*_*lor 3 linux php tail ubuntu error-logging
我试图找到一种方法(通过转义字符或软件)在我的 php 错误日志中显示彩色线条。
现在我正在阅读他们(现场)
tail -n 50 -f /var/log/apache2/error.log
这很棒,但我希望能够将error_log()某些行变为红色,例如,标记身份验证错误。有没有办法做到这一点?
我在 Ubuntu 12.04 上使用 PHP 5.3
我编写了一个小的 Perl 脚本,它改变与用户定义的正则表达式匹配的文本颜色。这是脚本:
#!/usr/bin/env perl
use Getopt::Std;
use strict;
use Term::ANSIColor;
my %opts;
getopts('hic:l:',\%opts);
if ($opts{h}){
print<<EoF;
Use -l to specify the pattern(s) to highlight. To specify more than one
pattern use commas.
-l : A Perl regular expression to be colored. Multiple expressions can be
passed as comma separated values: -l foo,bar,baz
-i : makes the search case sensitive
-c : comma separated list of colors;
EoF
exit(0);
}
my $case_sensitive=$opts{i}||undef;
my @color=('bold red','bold blue', 'bold yellow', 'bold green',
'bold magenta', 'bold cyan', 'yellow on_magenta',
'bright_white on_red', 'bright_yellow on_red', 'white on_black');
if ($opts{c}) {
@color=split(/,/,$opts{c});
}
my @patterns;
if($opts{l}){
@patterns=split(/,/,$opts{l});
}
else{
$patterns[0]='\*';
}
# Setting $| to non-zero forces a flush right away and after
# every write or print on the currently selected output channel.
$|=1;
while (my $line=<>)
{
for (my $c=0; $c<=$#patterns; $c++){
if($case_sensitive){
if($line=~/$patterns[$c]/){
$line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ge;
}
}
else{
if($line=~/$patterns[$c]/i){
$line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ige;
}
}
}
print STDOUT $line;
}
Run Code Online (Sandbox Code Playgroud)
如果您将其保存color在您所在的目录中$PATH并使其可执行 ( chmod +x /usr/bin/color),您可以将错误日志中的行着色,如下所示:
tail -f -n 50 /var/log/apache2/error.log | color -l "\[error\]","\[notice\]"
Run Code Online (Sandbox Code Playgroud)
正如所写的那样,脚本为 10 种不同的模式预定义了颜色,所以给它一个逗号分隔的列表,就像我在上面的例子中一样,将为每个匹配的模式着色不同的颜色。

除了@terdon 的多种颜色的花哨脚本之外,还有一种更简单的可能性——假设您只对一种颜色(红色)感到满意:
tail -n 50 -f /var/log/apache2/error.log | grep --color -P 'error|'
Run Code Online (Sandbox Code Playgroud)
--color显然告诉grep它的输出着色-P激活Perl 兼容的正则表达式|:这是逻辑 OR,因此foo|bar匹配“foo”或“bar”。这里正则表达式在这个运算符之后关闭,所以它匹配空字符串。这样没有“错误”的线条就会被打印出来(没有任何着色)注意:可能并非所有版本都grep支持这两个选项--color和-P,但使用最近的GNU grep应该可以工作(使用 GNU grep 2.6.3 测试)。
| 归档时间: |
|
| 查看次数: |
3739 次 |
| 最近记录: |