管道传输到sed时,CustomLog失败

时间:2015-03-11 20:52:46

标签: apache sed httpd.conf

我正在尝试使用管道式CustomLog来过滤我的日志:

的httpd.conf

CustomLog "|/bin/sed -r s/pass/REDACTED/g >> /workplace/tmp/access.log" common 

但是,当我向Apache发出请求时,我收到错误消息

/bin/sed: can't read >>: No such file or directory 

我在这里做错了什么? (似乎others have been able to use piped CustomLog like this

3 个答案:

答案 0 :(得分:4)

我刚刚解决了这个问题,并认为我应该在这里进行更新,即使这个帖子已经过时了。

首先,上面提到输入文件丢失的海报不正确。没有输入文件。 Apache正在通过管道而不是通过文件将日志消息发送到sed。

这里的技巧是告诉apache为sed命令启动一个shell。没有启动shell,">>"没有特殊意义,被视为文件名。要告诉apache为sed启动一个shell,你可以追加一个" $"在管道符号之后:

CustomLog "|$/bin/sed s/'creditCardPAN=[^ ]*'/'creditCardPAN=REDACTED'/ >>logs/ssl_access_log" PaymentLogFormat

答案 1 :(得分:0)

我认为你错过了输入文件。应该是:

sed -r s/pass/REDACTED/g myInputFile.txt >> /workplace/tmp/access.log

答案 2 :(得分:0)

为了我们的 PCI-DSS 合规性,在使用此自定义日志写入之前,我会从日志中删除每 16 位序列

CustomLog '|$/usr/bin/sed -r \"s:\([345][0-9]{5}\)\([0-9]{6}\)\([0-9]{4}\):\\\1******\\\3:g\" >> logs/access_log' common

PS:我不检查 luhn 校验和

检查

curl https://<instance>/A3000001111112222B -> GET /A300000******2222B

curl https://<instance>/A32345612345612343234561234561234B -> GET /A323456******1234323456******1234