delphi 写系统日志监控 转

不久前写了个抓取网页内容的小程序,跑了一晚上,本以为早上起来都抓完了,谁知道程序死掉了,分析半天,才发现用tmemo来记录日志的信息太多了,越积越多,本来memo的容量就不大。对于无法控制信息量的日志来说,有可能造成崩溃。记得见过盒子上一个关于手机发短信的小程序,上面有个日志的写法不错。

方法:

1、每写一行日志,先判断memo的行数是否超过自己设定的行数,我一般设为1000行,这样保存的日志大小一般在64K左右

2、判断保存日志的目录是否存在,不存在就建 一个

3、用日期加时间取一个日志名,象这种2010-03-12_07-15-23-171.txt 。

4、判断这个文件是否存在,(因为有些监控信息出现很快,有可能瞬间就能到到自己设定的行数,这时保存会冲掉上次的日志),存在就再按现在的时间取个名字

5、保存日志,清除memo

上代码

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

mmo1: TMemo;

btn1: TButton;

procedure btn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure writelog(amemo: tmemo; mst: string);

var

mfile: string;

begin

//设定多少行进行保存,如果大于200行进行保存 不过默认一般用1000行,这样一个日志文件在64K左右

if amemo.Lines.Count > 200 then

begin

//判断保存日志文件的目录是否存在

if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'logdata') then

MkDir(ExtractFilePath(ParamStr(0)) + 'logdata');

//按日期及时间设定保存日志的文件名

mfile := ExtractFilePath(ParamStr(0)) + 'logdata\' + formatdatetime('yyyy-mm-dd_hh-mm-ss-zzz', now) + '.txt';

while fileexists(mfile) do //如果此时间名称日志文件存在,再按下一时间进行取名

begin

mfile := ExtractFilePath(ParamStr(0)) + 'logdata\' + formatdatetime('yyyy-mm-dd_hh-mm-ss-zzz', now) + '.txt';

end;

//保存日志,并清空memo

amemo.Lines.SaveToFile(mfile);

amemo.Clear;

end;

amemo.Lines.Add(formatdatetime('yy-mm-dd hh:mm:ss ', now) + '>>' + mst)

end;

procedure TForm1.btn1Click(Sender: TObject);

var

i: Integer;

begin

for i := 0 to 400 do

begin

writelog(mmo1, '日志信息' + inttostr(i));

end;

end;

end.