Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中将日志写入固定大小的文本文件#_C#_Logging_Logfile_Circular Buffer - Fatal编程技术网

C# 如何在C中将日志写入固定大小的文本文件#

C# 如何在C中将日志写入固定大小的文本文件#,c#,logging,logfile,circular-buffer,C#,Logging,Logfile,Circular Buffer,我的要求是将日志写入一个固定大小的文本文件。我已经阅读了一些关于这方面的文章,但是这些对我来说有点复杂,因为我是编程新手 据我所知,我认为我能做的是将日志数据写入一个固定大小的队列,当队列即将溢出时,将旧日志数据出列,并将新日志数据入列。最后,将整个队列数据转储到日志文本文件中 这是建议性的解决方案还是其他更好的方法?根据文件大小和转储频率(您的“结尾”是什么意思),您的解决方案可能很好,也可能太重(频繁重写大型文件)。如果文件允许随机访问,我宁愿直接写入文件,直到到达文件末尾(允许的最大位置)

我的要求是将日志写入一个固定大小的文本文件。我已经阅读了一些关于这方面的文章,但是这些对我来说有点复杂,因为我是编程新手

据我所知,我认为我能做的是将日志数据写入一个固定大小的队列,当队列即将溢出时,将旧日志数据出列,并将新日志数据入列。最后,将整个队列数据转储到日志文本文件中


这是建议性的解决方案还是其他更好的方法?

根据文件大小和转储频率(您的“结尾”是什么意思),您的解决方案可能很好,也可能太重(频繁重写大型文件)。如果文件允许随机访问,我宁愿直接写入文件,直到到达文件末尾(允许的最大位置),然后将位置重置回文件开头并继续写入。我会为最后写入位置的64位值(在文件的开头或结尾)保留一个空间,我会在每次写入时更新它。这将让读者知道从哪里开始阅读,@felix-b当我说&;引用;最后,;引用;,我的意思是在程序退出之前,将队列中的所有数据写入文本文件。文件大小和频率——程序每一小时执行一次,每次运行的文件大小大约为20MB。基本上,我的程序会为每个ID获取一些状态值并写入日志。除非出现异常,否则这些状态不需要存储在日志中,我可以't禁用此状态日志记录,因为业务部门希望随机检查状态。对于程序退出时的20 MB,您的方法肯定会起作用(假设它在PC/服务器上运行,而不是在低规格设备上)。取决于文件大小和转储频率(您说的“结束”是什么意思),您的解决方案可能很好,也可能太重(频繁重写一个大文件)。如果文件允许随机访问,我宁愿直接写入文件,直到到达文件末尾(允许的最大位置),然后将位置重置回文件开头并继续写入。我会为最后写入位置的64位值(在文件的开头或结尾)保留一个空间,我会在每次写入时更新它。这将让读者知道从哪里开始阅读,@felix-b当我说&;引用;最后,;引用;,我的意思是在程序退出之前,将队列中的所有数据写入文本文件。文件大小和频率——程序每一小时执行一次,每次运行的文件大小大约为20MB。基本上,我的程序会为每个ID获取一些状态值并写入日志。除非出现异常,否则这些状态不需要存储在日志中,我可以't禁用此状态日志记录,因为企业希望随机检查状态。对于程序退出时的20 MB,您的方法肯定会起作用(假设它在PC/服务器上运行,而不是在低规格设备上运行)。