使用Lex将log日志转换为HTML
2006-04-17 14:50
357 查看
我们经常在程序里添加log, 用于在维护时查找异常发生时间和地点。通常log文件内容很多,将log文件格式化为带颜色不同字体的html可以方便阅读。
例如VB项目中log如下:
=========================================== START DBS ===========================================
DEBUG_MODE_OFF
ETC_OCX_OFF
LOG_LEVEL = 2
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBS114
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBS114//PSBDBS11413.log
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBIMG003
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBIMG003//PSBIMG00313.log
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBIMC104
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBIMC104//PSBIMC10413.log
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBA106
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBA106//PSBDBA10613.log
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
省略
=========================================== START DBS ===========================================表示一块log的开始
2006/04/12 07:59:06为log记载时间
basDBSCommon(DelLogFile)是Module(Function)
*** 開始 ***为函数调用开始;*** 終了 ***为函数调用结束
1. 使用Lex 加行数
非常简单,而且非常常见:
/*****************************************************************************
*
* Copyright (C) 2006 by Zhao Lei
*
*/
%{
/*
* includes
*/
#include <stdio.h>
#include <stdlib.h>
int lineno=1;
%}
LINE .*/n
%%
{LINE} { printf( "%5d %s", lineno++, yytext ); }
%%
main(){
yylex();
return 0;
}
编译运行addline.exe <PSBDBS11412.LOG >source.txt
结果如下:
1
2 =========================================== START DBS ===========================================
3 DEBUG_MODE_OFF
4 ETC_OCX_OFF
5 LOG_LEVEL = 2
6 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
7 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBS114
8 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
9 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBS114//PSBDBS11413.log
10 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
11 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
12 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
13 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBIMG003
14 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
15 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBIMG003//PSBIMG00313.log
16 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
17 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
18 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
19 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBIMC104
20 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
21 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBIMC104//PSBIMC10413.log
22 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
23 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
24 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
25 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBA106
26 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
27 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBA106//PSBDBA10613.log
28 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
29 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
30 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
31 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBC110
32 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
33 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBC110//PSBDBC11013.log
34 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
省略
2. 转换为HTML
将已加上行数的log转换为HTML的Lex如下:
/*
* includes
*/
#include <stdio.h>
#include <stdlib.h>
int section=1;
%}
LINE /n
TITLELINE .*("=")+(" ")+START(" ")+.+(" ")+("=")+
DIGITAL [0-9]
LEVEL [0-9]
TIME 200[0-9]"/"[0-1][0-9]"/"[0-1][0-9]" "[0-2][0-9]":"[0-5][0-9]":"[0-5][0-9] //时间的正则表达式
LOG_LEVEL .*LOG_LEVEL" ""="" "{LEVEL}
MESSAGE I|W|E
TRUE "True"
FALSE "False"
FUNCTION "(".+")"
START "*** ŠJŽn ***"
END "*** I—¹ ***"
STAT "***".+"***"
ERROR ."★★★ ERROR ★★★"|"★★★★★ 異常終了 ★★★★★"
MENUS "-""-"+
ONE " "+1" "+
OTHERS .*
SIMPLE {TIME}{MENUS}{MESSAGE}{ONE}{OTHERS}{FUNCTION}":"
%%
{TITLELINE} { printf("</div><p></p><div style=/"background-color: #CCFFFF; layer-background-color: #CCFFFF; border: 1px none #000000;/"><p>section:<b>%d</b></p>",section++);}
{MENUS} { printf("");}
{ERROR} { printf("<font color=/"#FF0000/">"); ECHO;printf("</font>");}
{DIGITAL} { printf("<font color=/"#0033FF/">"); ECHO; printf("</font>");}
{TIME} { printf("<em>"); ECHO; printf("</em>");}
{LINE} { ECHO; printf("<br>");}
{TRUE}|{FALSE} { printf("<font color=/"#FF0099/">"); ECHO; printf("</font>");}
{FUNCTION} { printf("<b>"); ECHO; printf("</b>");}
{STAT} { printf("<b><font color=/"#00FF00/">"); ECHO; printf("</font></b>");}
%%
main(void){
printf("<html><body>/n");
yylex();
printf("/n</html></body>");
return 0;
}
编译后,运行:
DBSLog.exe < source.txt > dest.htm
dest.htm显示如下图:
例如VB项目中log如下:
=========================================== START DBS ===========================================
DEBUG_MODE_OFF
ETC_OCX_OFF
LOG_LEVEL = 2
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBS114
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBS114//PSBDBS11413.log
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBIMG003
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBIMG003//PSBIMG00313.log
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBIMC104
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBIMC104//PSBIMC10413.log
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBA106
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBA106//PSBDBA10613.log
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
省略
=========================================== START DBS ===========================================表示一块log的开始
2006/04/12 07:59:06为log记载时间
basDBSCommon(DelLogFile)是Module(Function)
*** 開始 ***为函数调用开始;*** 終了 ***为函数调用结束
1. 使用Lex 加行数
非常简单,而且非常常见:
/*****************************************************************************
*
* Copyright (C) 2006 by Zhao Lei
*
*/
%{
/*
* includes
*/
#include <stdio.h>
#include <stdlib.h>
int lineno=1;
%}
LINE .*/n
%%
{LINE} { printf( "%5d %s", lineno++, yytext ); }
%%
main(){
yylex();
return 0;
}
编译运行addline.exe <PSBDBS11412.LOG >source.txt
结果如下:
1
2 =========================================== START DBS ===========================================
3 DEBUG_MODE_OFF
4 ETC_OCX_OFF
5 LOG_LEVEL = 2
6 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
7 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBS114
8 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
9 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBS114//PSBDBS11413.log
10 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
11 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
12 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
13 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBIMG003
14 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
15 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBIMG003//PSBIMG00313.log
16 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
17 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
18 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
19 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBIMC104
20 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
21 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBIMC104//PSBIMC10413.log
22 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
23 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
24 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
25 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBA106
26 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
27 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBA106//PSBDBA10613.log
28 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
29 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 終了 ***
30 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):*** 開始 ***
31 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DelLogFile):strAppName = PSBDBC110
32 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 開始 ***
33 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):strFileName = D:/logs/batch/sb/PSBDBC110//PSBDBC11013.log
34 2006/04/12 07:59:06 -------- ------- I 1 ------- basDBSCommon(DeleteFile):*** 終了 ***
省略
2. 转换为HTML
将已加上行数的log转换为HTML的Lex如下:
/*
* includes
*/
#include <stdio.h>
#include <stdlib.h>
int section=1;
%}
LINE /n
TITLELINE .*("=")+(" ")+START(" ")+.+(" ")+("=")+
DIGITAL [0-9]
LEVEL [0-9]
TIME 200[0-9]"/"[0-1][0-9]"/"[0-1][0-9]" "[0-2][0-9]":"[0-5][0-9]":"[0-5][0-9] //时间的正则表达式
LOG_LEVEL .*LOG_LEVEL" ""="" "{LEVEL}
MESSAGE I|W|E
TRUE "True"
FALSE "False"
FUNCTION "(".+")"
START "*** ŠJŽn ***"
END "*** I—¹ ***"
STAT "***".+"***"
ERROR ."★★★ ERROR ★★★"|"★★★★★ 異常終了 ★★★★★"
MENUS "-""-"+
ONE " "+1" "+
OTHERS .*
SIMPLE {TIME}{MENUS}{MESSAGE}{ONE}{OTHERS}{FUNCTION}":"
%%
{TITLELINE} { printf("</div><p></p><div style=/"background-color: #CCFFFF; layer-background-color: #CCFFFF; border: 1px none #000000;/"><p>section:<b>%d</b></p>",section++);}
{MENUS} { printf("");}
{ERROR} { printf("<font color=/"#FF0000/">"); ECHO;printf("</font>");}
{DIGITAL} { printf("<font color=/"#0033FF/">"); ECHO; printf("</font>");}
{TIME} { printf("<em>"); ECHO; printf("</em>");}
{LINE} { ECHO; printf("<br>");}
{TRUE}|{FALSE} { printf("<font color=/"#FF0099/">"); ECHO; printf("</font>");}
{FUNCTION} { printf("<b>"); ECHO; printf("</b>");}
{STAT} { printf("<b><font color=/"#00FF00/">"); ECHO; printf("</font></b>");}
%%
main(void){
printf("<html><body>/n");
yylex();
printf("/n</html></body>");
return 0;
}
编译后,运行:
DBSLog.exe < source.txt > dest.htm
dest.htm显示如下图:
相关文章推荐
- php error_log记录日志的使用方法和配置 (日志目录一定要手动创建)
- SSIS 使用Sql Sever记录日志和查询sysssislog
- php的高性能日志系统 seaslog 的安装与使用
- 使用XSLT将XML数据转换成HTML
- 代码实现获取log日志和logcat使用方法
- "奇葩家园"之log日志的使用
- Java使用Log日志系统(common-logging和log4j)
- C# 使用 wkhtmltopdf 把HTML文本或文件转换为PDF
- java使用pd4ml将html转换成pdf
- Symfony2 配置自己的log日志、使用配置文件定义全局常量
- rman使用crosscheck archivelog all命令时验证归档日志失败
- 日志log使用序列反序列加密(Serializer) DESCrypto 加密
- 使用Jacob实现Word转换Html
- iptables学习与研究四(使用LOG记录失败日志)
- 使用tidy_win32.zip转换GB2312编码的HTML页面
- 字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理
- java中log日志的使用1
- 使用ApexSQL Log 分析数据库在线日志及数据库备份
- 使用SgmlReader将HTML转换为合法的XML
- 使用python分析git log日志示例