Delphi 如何创建操作日志(基于按下的按钮)

Delphi 如何创建操作日志(基于按下的按钮),delphi,logging,Delphi,Logging,如何制作文本文件并在其中添加新行?文本将包含按下按钮的历史日期和时间 我希望输出日志的内容如下: 1/5/2014 9:33:44 AM Print Button Pressed. 1/5/2014 9:35:44 AM Clear (popup menu). 以此类推。类似这样的方法很有效: procedure Log(const s:string); const FileName='log.txt'; begin TFile.AppendAllText(FileName, Date

如何制作文本文件并在其中添加新行?文本将包含按下按钮的历史日期和时间

我希望输出日志的内容如下:

1/5/2014 9:33:44 AM Print Button Pressed.
1/5/2014 9:35:44 AM Clear (popup menu).

以此类推。

类似这样的方法很有效:

procedure Log(const s:string);
const FileName='log.txt';
begin
    TFile.AppendAllText(FileName, DateTimeToStr(Now()) + ' '+ s + sLineBreak);
end;

Log('Print Button Pressed.');
Log('Clear (popup menu).');
您必须将
IOUtils
添加到顶部的uses子句中


如果您需要更高级的东西,请看一看示例。

这可以通过传统的Pascal I/O功能轻松完成

Procedure Log (const s: string);
var
 f: textfile;

begin
 assignfile (f, logfile);
 {$I-}
 append (f);
 if ioresult <> 0 then rewrite (f);
 {$I+}
 writeln (f, datetimetostr (now), ' ', s);
 flush (f);
 closefile (f);
end;

也许,最好使用fastreport(内置Delphi)之类的工具。

您可以编写代码。最近有一个关于如何写入文本文件的问题
FormatDateTime
将提供日期和时间格式。您需要编写一个方法,在发生某些事情时记录信息。您尝试过什么,您正在努力解决什么问题?现在你的问题太开放了。因此,最好的答案可能是:“阅读Marco Cantu的《精通Delphi》。”这本书涵盖了你问题的所有方面。“你编写代码”是一个相当平淡的建议。“阅读delphi书籍”也是如此,因为它们不会真正告诉您日志需要从多个线程收集到缓冲区,并使用专门用于此目的的线程转储到文件/网络。就像主线程一样,可能在主事件循环中。他们也不会告诉您,将按钮、网格等子类化以将日志功能安装到适当的位置可能是一个好主意。为了从多个来源收集遥测数据,您可能需要一个支持异步操作的网络客户机/服务。-1,仅用于提出1980样式的文件I/O。有许多更现代的替代方案;把这当作任何一种解决办法都是可笑的。这相当于用“Windows 3.0”回答一个关于“我应该安装什么版本的Windows?”的问题。@KenWhite:这个问题没有提到使用的是哪个版本的Delphi。目前,只有另一个答案需要使用unit IOUTIL,而OP拥有的版本中可能无法使用unit IOUTIL。因此,我认为我的回答是公平的,我要求你删除否决票。除非海报添加Delphi 1标签,并明确表示他们询问的是Delphi的旧16位版本,否则你的回答绝对是最糟糕的选择。你本可以选择至少10种比这更好的方式,而你的借口完全是错误的。Delphi 1甚至有比您的解决方案更好的方法。@KenWhite我不得不承认,有时候
WriteLn
的简单性对我很有吸引力。不止一个C-ish
sprintf
clone.@Arioch'The:当然。我一直在控制台应用程序中使用它将结果转储到屏幕上。到目前为止,对于文件I/O来说,它已经过时了,尽管没有理由推荐它作为第一个替代方案,特别是对于一个显然是新程序员的人。
Procedure Log (const s: string);
var
 f: textfile;

begin
 assignfile (f, logfile);
 if fileexists (logfile)
  then append (f)
  else rewrite (f);
 writeln (f, datetimetostr (now), ' ', s);
 flush (f);
 closefile (f);
end;