我正在尝试使用管道式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)
答案 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