【发布时间】:2016-01-03 14:36:43
【问题描述】:
我需要使用 HTTP Apache 管道日志将响应代码为“400”的所有条目放入单独的文件中。为此,我想使用 PowerShell Select-String,因为它最接近 Linux 中的 grep 命令:
我有以下批处理可以从 cmd 环境中调用 PowerShell 脚本:
powershell -command "& { sls ,400, 'cmd -ca | select -exp line >> access_400.log }"
据我所知,httpd 中的“CustomLog”会是这样的:
CustomLog "| 'call_powershell_script_that_will_extract_400_entries.ps1' " common
如何将 CustomLog 的管道输出输入到将提取具有“400”响应代码的条目的 PowerShell 脚本?
【问题讨论】:
-
您没有完全在 PowerShell 中执行此操作的任何特殊原因?我的意思是,除了一种不可抗拒的冲动,让你的生活变得比它需要的更复杂。
-
我以为在“|”之后需要批处理文件,不知道它也接受powershell脚本无论如何我让脚本在CustomLog之外工作,但是当我使用它时,output.log被锁定并且apache中的error.log被填充“文件无法打开,因为它正被另一个进程使用”
-
将所有条目写入单个日志文件然后从通用日志文件中获取您关心的 400 个条目会更容易吗?我觉得这将是一个更好的解决方案,试图将一些疯狂的东西写入 Apache 配置文件,但可能会出错。此外,此时使用 PowerShell 的工作要简单得多。它只是“Get-Content httpRoot\logs*.log | Select-String -Pattern 400”,如果您想这样做,也可以作为计划作业运行。让日志在一天左右后更改名称可能会更好。
-
@PSGuy 这几乎就是我目前的 B 计划。使其成为 PowerShell 脚本的问题在于性能。我拥有的 access.log 可能以 GB 为单位。使用 PowerShell,这将需要很长时间。我目前正在制作一个简单的 java 程序来处理读取和过滤 access.log 的过程
标签: windows apache powershell batch-file