`
touchinsert
  • 浏览: 1315912 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用Lex将log日志转换为HTML

阅读更多

们经常在程序里添加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:06log记载时间

basDBSCommon(DelLogFile)ModuleFunction

*** 開始 ***函数始;*** 終了 ***函数

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转换为HTMLLex如下:


/*
*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示如下

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/tyrone1979/lex1.gif"></shape>
分享到:
评论

相关推荐

    关键字转换为大写lex.rar

    这个压缩包很可能包含了一个名为“4.b”的源代码文件,该文件可能是用Lex(也称为Flex)编写的一个词法分析器,用于读取源程序并将其中的关键字识别并转换为大写形式。 词法分析是编译器设计过程的第一步,它将源...

    lex的使用及说明,文件的生成

    Lex 读取输入源,使用正则表达式匹配字符串,并将匹配的字符串转换为标志。每个匹配的模式都对应一个动作,通常情况下,动作是返回一个标志,代表匹配的字符串。 Lex 文件格式: Lex 输入文件分为三个部分,使用 ...

    使用lex分析java源程序.rar_LEX_java lex_java 词法分析_lex java_正则表达式

    它的基本原理就是使用正则表达式扫描匹配文本,并为每一个匹配模式定义一些操作,当用C语言作宿主语言时,这些操作都由C语言实现。一种匹配的正则表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。当 ...

    Lex和Yacc工具使用方法

    在编译器设计中,Lex 负责将输入串词法结构的正规式及相应的动作转换成一个宿主语言的程序,即词法分析程序,而 Yacc 则负责将上下文无关文法转换成一个确定的自动机。下面将详细介绍 Lex 和 Yacc 的使用方法。 ...

    完整介绍Lex和Yacc Windows 上的使用

    完整介绍Lex和Yacc Windows 上的使用 及工具的按装, 及环境变量的设置, GNU Bison实际上是使用最广泛的Yacc-like分析器生成器,使用它可以生成解释器,编译器,协议实现等多种程序. 它不但与Yacc兼容还具有许多Yacc不...

    lex-yacc或flex-bison的介绍

    通过学习本教程,您将了解如何使用 lex 和 yacc 工具来构建分析器,理解和提取文本中的关键部分,并将其转换为所需的信息或数据结构。您将学会如何定义词法元素、编写 yacc 规则,并使用相应的规则机制来构建和定义...

    LEX应用举例 LEX

    在 LEX 应用举例中,第一部分是用 %{ 和 }% 包围的内容,这部分内容将被直接放在 Lex 输出的 C 代码中的顶部。这个部分的内容可以用来定义所需要的宏、函数和包含头文件等等。 例如,在这个例子中,我们可以看到有...

    lex与yacc.pdf

    Lex将这些正则表达式转变为词法分析程序能够用来极快地扫描输入文本的形式。 Yacc是语法分析器的生成器,能够将输入拆分成单元,并建立那些单元之间的关系,称为分析(Parsing)。Yacc采用简明的语法描述,并产生一...

    LEX.pdf 有關LEX的詳細介紹

    本文将详细介绍LEX的工作原理、如何使用LEX来生成词法分析器程序、以及在实际应用中的一些技巧。 #### 二、LEX的工作原理与特点 ##### 1. 工作原理 - **词法分析**:LEX的核心功能在于词法分析,即识别文本中的...

    LEX及YACC实现嵌入式SQL分析器

    在嵌入式SQL分析器中,LEX负责识别SQL语句中的关键字、标识符、字符串、数字等基本元素,并将其转换为相应的词法单元,以便YACC进行进一步的语法分析。 **YACC(语法分析器生成器)**:YACC是一种基于Backus-Naur ...

    使用lex和yacc编写shell

    使用lex和yacc编写shell 在Linux环境中使用C语言编写一个简单的shell命令解释器程序,程序应当具有以下基本特征: 能够执行fg、bg、cd、history、exit等内部命令。 能够执行外部程序命令,命令可以带参数。 使用输入...

    LEX示例.rar LEX示例.rar

    通过运行LEX工具,我们可以将这些规格文件转换为实际的词法分析器代码,然后编译并运行以测试其功能。 学习这些示例可以帮助我们理解以下关键概念: 1. **正则表达式**:LEX规则的基础,用于定义Token的模式。例如...

    使用Lex, Yacc开发的算术表达式解析器,以及算术表达式的计算器

    例如,它会将"2 + 3 * (4 - 5)"解析为一系列的token,如:INT(2)、PLUS、INT(3)、TIMES、LPAREN、INT(4)、MINUS、INT(5)、RPAREN。 接着,Yacc(Yet Another Compiler-Compiler)是一个语法分析器生成器,它根据...

    编译原理Lex--作为交流学习使用

    LEX的使用不仅限于编译器的开发,它还可以应用于许多其他领域,比如文本解析、日志分析等。通过学习LEX,我们不仅可以掌握一种强大的工具,还能深入理解编译器的内部运作,这对于提升软件开发者的技能和理解力是非常...

    Fast Lex词法分析工具

    Lex是一个基于正则表达式的描述词法分析器的工具,已经广泛用于...它的输入使用Lex语言编写的源程序,在Lex源程序中,要将基于正则表达式的模式说明与词法分析器要完成的动作组织在一起。输出是词法分析器的C语言程序。

    lex 和yacc的使用说明

    ### lex 和yacc的使用说明 #### 序言 在计算机科学领域,解析文本和处理自然语言是一项重要的任务。为了实现这一目标,多种工具和技术被开发出来,其中lex(词法分析器生成器)和yacc(又一个C编译器)是两个广泛...

    lex Lex 入门学习

    Lex将这些信息转换成一个词法分析器程序,该程序能够: - **读取输入流**:从输入数据中读取字符。 - **识别模式**:使用正则表达式来匹配特定的字符序列。 - **执行动作**:当找到匹配的模式时,执行相关的程序...

    编译原理词法分析LEX版

    2. **编译LEX源文件**:使用LEX工具,如`flex`命令,将LEX源文件转换为C源代码。 3. **链接生成的C代码**:编译生成的C代码,并与编译器的其他部分链接,形成完整的编译器前端。 4. **运行词法分析器**:在运行时,...

    lex和yacc程序

    4. **lex-docs.txt**:同样,这可能是lex的文档,提供有关如何编写词法分析器规则、使用lex工具以及常见问题的说明。 综上所述,lex和yacc是用于编译器构造的重要工具,它们分别处理程序源代码的词法和语法分析阶段...

    lex&yacc语言解析

    Yacc会将这个规格转换为C代码,生成的C程序可以接收词法分析器(由Lex生成)提供的词法单元流,并进行语法分析,最终构建抽象语法树(AST)或者执行相应的操作。 在给定的文件列表中,我们可以看到一些可能与学习和...

Global site tag (gtag.js) - Google Analytics