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.
delphi 写系统日志监控 转的更多相关文章
- delphi使用outputdebugstring调试程序和写系统日志
delphi使用outputdebugstring调试程序和写系统日志 procedure TForm1.btn1Click(Sender: TObject); begin OutputDebugSt ...
- Delphi写的DLL,OCX中多线程一个同步问题
Delphi写的DLL,OCX中如果使用了TThread.Synchronze(Proc),可能导致线程死锁,原因是无法唤醒EXE中主线程, Synchronze并不会进入EXE主线程消息队列. 下面 ...
- 用delphi写多屏幕程序
http://blog.csdn.net/zyyjc/article/details/6530728 别现在有些POS机是双屏幕的(比如卡西瓦POS机),一个屏幕可以当顾客显示屏用,当闲时也可以显示一 ...
- Delphi编写后台监控软件
Delphi编写后台监控软件 文章来源:Delphi程序员之家 后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任 ...
- 2018-8-10-C#-写系统日志
title author date CreateTime categories C# 写系统日志 lindexi 2018-08-10 19:16:53 +0800 2018-2-13 17:23:3 ...
- Delphi写的DLL回调C#
C#的调用Delphi的DLL没有问题,DLL回调时遇到了麻烦,网上找了个方法,解决了这个问题 Delphi部分,列举了三种回调函数定义 library test; uses SysUtils; {$ ...
- 2.2 代码块--delphi 写日志模块
//2.2 代码块--写日志 //调用例句如:LogMsg('FTP上传线程终止',False,true); procedure LogMsg(AMsg: string; const blnIsErr ...
- Delphi 写日志的类
unit uProgLog; interface uses Windows, SysUtils, SyncObjs; const C_LOG_LEVEL_TRACE = $; C_LOG_LEVEL_ ...
- 用Delphi写一个UTF8编码格式的文本文件
... var f: TextFile; begin AssignFile(f, 'test.txt'); Rewrite(f); write(f, #$EF+#$BB+#$BF); // UTF-8 ...
随机推荐
- fluentd结合kibana、elasticsearch实时搜索分析hadoop集群日志<转>
转自 http://blog.csdn.net/jiedushi/article/details/12003171 Fluentd是一个开源收集事件和日志系统,它目前提供150+扩展插件让你存储大数据 ...
- 三星I9308(移动版)正确Root的方法,进入正确的recovery的关键(网上很多方法是误导)
三星I9308(移动版)正确Root的方法,进入正确的recovery的关键(网上很多方法是误导) 1)首先在电脑上安装手机驱动:下载地址:点击这里下载 2)手机设置USB调试 方法1:设置- ...
- css样式之背景图片
1.css样式背景之使用图片来做为背景 example: <!DOCTYPE html> <html> <head> <meta http-equiv=&qu ...
- Web字体工具整理,网页图标字体以及使用方法整理
常用网站app logo 下载: http://www.iconfont.cn/collections/show/268?spm=a313x.7781069.0.0.nDYawz 1.Web字体免费生 ...
- 各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异
转载:http://www.w3help.org/zh-cn/causes/BX2047 标准参考 无. 问题描述 一般情况下,onbeforeunload 事件处理函数内会写入一些提示性语句,当用户 ...
- [转帖]gesture recognition
http://wenku.baidu.com/view/53c3331a6bd97f192279e9c9.html HSI与RGB的Matlab实现. http://wenku.baidu.com/v ...
- 03C#基础(2)
1.比较运算符 ==等于; !=不等于; >大于; >=大于或者等于; <小于; <=小于或者等于; 比较运算符(又称关系运算符)用来进行值得真假性判断,结果是boo ...
- QFormLayout
这个是官方的文档,现在还没有翻译,有时间自己会把这个好好的翻译一下. QFormLayout类是用来管理表格的输入部件以及和它们相关联的标签. 也就是说QFormLayout这个布局一般情况下是用来在 ...
- Java学习----你可以告诉对象该怎么做(方法中传参)
对象根据参数传递来的条件执行相应的功能. package org.demo.app2; public class App2 { public void print(String msg, int nu ...
- table 表格隔行换色实现
table 表格隔行换色实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...