【发布时间】:2014-04-08 01:39:03
【问题描述】:
对于我想在这里做的事情,我可能会走上完全错误的道路,所以请随时提出更好的选择/解决方案。
我有一堆 PowerShell 脚本,它们都有自己的日志文件。日志记录是通过单独的函数文件中的函数完成的。我希望在文件达到一定大小时开始删除日志中最旧的行,以免文件变得太大。
我的问题是如何删除最旧的行。我不喜欢使用“Get-Content”的想法,删除顶行,然后使用“Set-Content”将日志文件替换为相同的日志减去顶行,然后重复直到日志低于指定最大尺寸。
例如:
While ((Get-ChildItem $LogFile).Length -gt $MaxLogSize)
{
$TopLine,$Remainder = Get-Content $LogFile
Set-Content -Value $Remainder -Path $LogFile
}
这显然不够,因为它必须将整个日志放入一个变量中,然后再将其放回日志文件中。
我想知道 PowerShell 是否可以简单地删除日志文件中的第一行并重复该操作直到文件小于最大文件大小?我知道有“清除内容”cmdlet,但据我所知,这只会清除整个文件。
【问题讨论】:
-
我不认为我见过这种日志记录行为,并且希望程序在旧日志文件达到大小/年龄限制时创建一个新日志文件。每小时/每天/每周都有一个新的日志文件,您还可以选择要保留的“哪些”数据,而不仅仅是“多少”。您是否已经考虑并拒绝创建新日志并使用单独的脚本删除旧日志?
-
为什么不使用像 NLog 或 log4net 这样的日志框架呢?在 PowerShell 中使用它们非常简单,并且两个框架都提供了处理日志文件的策略。
-
@TessellatingHeckler 环形缓冲区是在 60 年代发明的。有关此类日志记录的实际示例,Windows XP/2003 使用了一个用于任务计划程序。
标签: powershell logging