我在 Windows 上有一个服务,它正在运行另一个进程,该进程将许多行打印到其 STDERR 和 STDOUT。我正在捕获这些行并将它们重定向到某个日志文件。如果日志文件的大小太大而无法创建另一个文件并保存前一个文件,我想在这个日志文件上进行日志轮转。我没有自己实现它,而是想到使用一些第三方日志轮转库,比如 spdlog。
问题是我无法明显地让该过程使用记录器 API,如果
答案1
我编写了一个非常基本的 Powershell 脚本来为您指明正确的方向。
Function logrotate (
$activefile = "C:\activelog.text",
$dest = "C:\",$activefile_size,
$newfilename = "arotatedlog.text")
{
$activefile_size = get-item $activefile| Select-Object Name, CreationTime, @{Name="Kbytes";Expression={$_.Length / 1Kb}}
if ($activefile_size.Kbytes -gt 150)
{Write-Host "File size equal or greater than 150KB"
$dest = "$dest + $newfilename"
Get-Content $activefile | Set-Content -Path $dest
}
logrotate
- 获取 activelog 文件
- 将 activelog 文件的大小转换为千字节
- 检查 activelog 文件是否为 150kb
- 如果文件为 150kb,则获取文件内容并将其设置为新文件。
- 如果文件大小不是 150kb,则结束脚本。
需要注意的事项
重复文件存在异常是您应该注意的主要事项。根据文件阈值,您可能需要将增量数字添加到新文件名中。
希望这可以帮助。