不久前写了个抓取网页内容的小程序,跑了一晚上,本以为早上起来都抓完了,谁知道程序死掉了,分析半天,才发现用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.

delphi 写系统日志监控 转的更多相关文章

  1. delphi使用outputdebugstring调试程序和写系统日志

    delphi使用outputdebugstring调试程序和写系统日志 procedure TForm1.btn1Click(Sender: TObject); begin OutputDebugSt ...

  2. Delphi写的DLL,OCX中多线程一个同步问题

    Delphi写的DLL,OCX中如果使用了TThread.Synchronze(Proc),可能导致线程死锁,原因是无法唤醒EXE中主线程, Synchronze并不会进入EXE主线程消息队列. 下面 ...

  3. 用delphi写多屏幕程序

    http://blog.csdn.net/zyyjc/article/details/6530728 别现在有些POS机是双屏幕的(比如卡西瓦POS机),一个屏幕可以当顾客显示屏用,当闲时也可以显示一 ...

  4. Delphi编写后台监控软件

    Delphi编写后台监控软件         文章来源:Delphi程序员之家     后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任 ...

  5. 2018-8-10-C#-写系统日志

    title author date CreateTime categories C# 写系统日志 lindexi 2018-08-10 19:16:53 +0800 2018-2-13 17:23:3 ...

  6. Delphi写的DLL回调C#

    C#的调用Delphi的DLL没有问题,DLL回调时遇到了麻烦,网上找了个方法,解决了这个问题 Delphi部分,列举了三种回调函数定义 library test; uses SysUtils; {$ ...

  7. 2.2 代码块--delphi 写日志模块

    //2.2 代码块--写日志 //调用例句如:LogMsg('FTP上传线程终止',False,true); procedure LogMsg(AMsg: string; const blnIsErr ...

  8. Delphi 写日志的类

    unit uProgLog; interface uses Windows, SysUtils, SyncObjs; const C_LOG_LEVEL_TRACE = $; C_LOG_LEVEL_ ...

  9. 用Delphi写一个UTF8编码格式的文本文件

    ... var f: TextFile; begin AssignFile(f, 'test.txt'); Rewrite(f); write(f, #$EF+#$BB+#$BF); // UTF-8 ...

随机推荐

  1. 亲测 安装 mysql5.5 64位

    1.选择 customn 更改安装目录2.选择 develop 模式,默认,占用内存较小. server machine 中等内存 dedicate mysql server machine 专用服务 ...

  2. 会用errno,事半功倍

    参考一 参考二 参考三 参考四 一. errno二. 把errno的数字转换成相应的文字说明1. 使用strerror函数2. 使用perror函数三. errno的线程/进程安全性附录 一. err ...

  3. RT: TCP connection close

    CLOSE is an operation meaning "I have no more data to send." The notion of closing a full- ...

  4. iOS 开发-单元测试

    前言 维基百科对单元测试的定义如下: 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可 ...

  5. 有向图的欧拉路径POJ2337

    每个单词可以看做一条边,每个字母就是顶点. 有向图欧拉回路的判定,首先判断入度和出度,其实这个题判定的是欧拉通路,不一定非得构成环,所以可以有一个点的顶点入度比出度大1,另外一个点的出度比入度大1,或 ...

  6. Python简易爬虫

    经常需要下载论文,每次都需要去网页上搜索,然后点击下载,实在麻烦,正好最近刚入门Python,心血来潮,想着写一个爬虫 经过一天查阅资料,基本算是完成了,但是还是不足,比如对知网和万方暂时还不行,但是 ...

  7. 7-http1.1和2.0的区别?

    1.多路复用:减少tcp请求 合并成一个2.首部压缩:会把多个首部压缩3.服务器推送:不用request也可以response

  8. (转)DEDECMS 如何让栏目外部链接在新窗口中打开

    近遇到一个问题,就是dedecms的导航,是用外部链接的,但是原窗口打开不好看,新窗口打开好点.OK,放狗... 1. 查找模板中的head.htm将<li><a href='[fi ...

  9. ViewPager 嵌套Listview 让Listview响应 ViewPager 左右滑事件

    一段拦截判断而已.   之前一直误解了一个拦截的描述.导致搞了半天. 结论: onInterceptTouchEvent 返回true,就由本身View的onTouchEvent进行事件消费. /** ...

  10. 关于模板中的动态取值 ---反射与javascript脚本编译

    在项目中经常遇到一个问题,打印word或者打印excel的时候,我们经常使用一对一的赋值或者批量替换的方式来对模板进行修改. 但是现在遇到两种场景: 1.取值是通过自定以方法进行取值的. 如:一个销售 ...