日志记录.01_内存流操作
Posted 耗喜天涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日志记录.01_内存流操作相关的知识,希望对你有一定的参考价值。
日志记录,我们一般通过本地文本文件进行记录,对于使用的文件后缀名,一般为比较形象的 .log ,当然也可以是其它任何自定义的格式, 如: .abc, .xyz
本次随笔主要描述的是借用内在存流来处理日志记录 TMemoryStream;
01. 日志记录,我们无创建一个用于记录的文件. 使用函数 FileCreate(文件路径), 可以是绝对路径,也可以是相对路径
♦ 注意一点: FileCreate 函数会覆盖原有的内容; 而且还不会进行提示;
♦ 在实际使用过程中,最好通过 FileExists 判断一次再进行 FileCreate 动作; 否则原有的内容都将丢失 ;
02. 对于日志内容的传递变量类型.
♦为解决中文双字节及Delphi中对字节长度计算有可能不一致的问题,我们使用 AnsiString 来传递内容
03.为有效处理不同记录内容的换行处理,我们需要在每次的日志记录内容添加上回车换行符 #13#10, 也可以直接使用 sLineBreak;
04.注意 FileSeek函数中三号参数的作用: 0:从文件头开始定位;1:从当前位置开始定位;2:从文件尾定位
05.注意在写内存储内容时,使用的是内存流的实际内容起始地址: FMS.Memory^, 而不是指针的地址: FMS.Memory
------------------------------------------------------------
var FLogMsg:AnsiString; FMS:TMemoryStream; FLogFileName:String; TH:THandle; begin //日志文件 FLogFileName := ‘LogTest.txt‘; if not FileExists(FLogFileName) then TH := FileCreate(FLogFileName) else TH := FileOpen(FLogFileName,fmOpenWrite+fmShareDenyWrite); //文件定位.注意3号参数: 本处是定位到文件尾 FileSeek(TH,0,2); //日志内容 FLogMsg := AnsiString( FormatDateTime(‘HH:MM:SS.ZZZ‘,Now)+‘ ‘+‘ 这是一个测试日志内容.‘ ); //内存流 FMS := TMemoryStream.Create; FMS.Write(FLogMsg[1],Length(FLogMsg)); //写日志 FMS.Position := 0; //保证从内存流最开始记录 FileWrite(TH,FMS.Memory^,FMS.Size); //操作完毕 FileClose(TH); end;
以上是关于日志记录.01_内存流操作的主要内容,如果未能解决你的问题,请参考以下文章
lamp架构nginx限流配置(自动索引缓存日志轮询与禁用部分记录目录和文件限制中文乱码)重定向防盗链
lamp架构nginx限流配置(自动索引缓存日志轮询与禁用部分记录目录和文件限制中文乱码)重定向防盗链
lamp架构nginx限流配置(自动索引缓存日志轮询与禁用部分记录目录和文件限制中文乱码)重定向防盗链