【发布时间】:2019-09-14 10:05:19
【问题描述】:
我有一个活动的生产日志文件,它会在文件达到 1 GB 的大小限制后删除日志内容,并在每个午夜压缩文件,因此在每天的压缩文件中,我们没有完整的日志流量一整天。我们拥有的只是从上次达到 1 GB 到当天午夜的日志。
我正在尝试查看该文件并将该文件的内容实时复制到其他文件。经过一番研究,我了解到FileSystemWatcher 并尝试了几种变体,但无法将文件的内容附加到另一个文件。
使用以下脚本,我可以在控制台上显示消息。但是,我无法将内容附加到另一个文件。
所以,我想要实现的是,每当 XML 文件发生更改时,日志文件和其他文件(我将使用此脚本创建)之间都会发生实时同步,以便在结束时一天,我有一个完整的日志文件。由于这是一个生产系统(即将退役),它很忙,所以我正在尝试实现一个实时同步解决方案。
$folder = "C:\Users\hslasw\docs\Log_Truncation_Issue"
$filter = "*.xml"
$Watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubdirectories = $false
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
$onChanged = Register-ObjectEvent $Watcher -EventName Changed -SourceIdentifier FileChanged -Action {
$path = $Event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
$filename = $path
Write-Host (Get-Content -Path $path) |
Out-File -Encoding Ascii -FilePath -Append C:\Users\xxxx\docs\Log_Truncation_Issue_Destination\testfile.xml
}
# Unregister-Event FileChanged
这就是问题所在:
Write-Host (Get-Content -Path $path) |
Out-File -Encoding Ascii -FilePath -Append C:\Users\xxxx\docs\Log_Truncation_Issue_Destination\testfile.xml
有没有更好的方法?在我的情况下,拆分日志文件使其永远不会达到 1 GB 是不可能的。另外需要注意的是,APP不能被修改来改变日志行为。我也考虑过rsync,因为它是一个内置工具。但是,我需要将文件名作为变量传递,rsync 似乎不支持该变量。
【问题讨论】:
标签: windows powershell logging filesystemwatcher