我目前有一个脚本,该脚本跟踪我们的错误日志并将日志发送到我们的闲置通道。我如何获取它来发送整个错误而不是逐行发送。这就是我目前的情况,一个错误被发送为数百条单行帖子。
#!/bin/bash
tail -f "$1" | while read LINE; do
(echo "$LINE") && curl -X POST --silent --data-urlencode \
"payload={\"text\": \"\`\`\`$1 $(echo $LINE | sed "s/\"/'/g")\`\`\`\"}" "$2";
done
有没有办法让bash做到这一点?
这是松弛状态:
```/var/log/php_error_log Stack trace:```
```/var/log/php_error_log #0 /opt/library/Zend/Mail/Protocol/Smtp.php(167): Zend_Mail_Protocol_Abstract->_connect('tcp://mail...')```
```/var/log/php_error_log #1 /opt/library/Zend/Mail/Transport/Smtp.php(199): Zend_Mail_Protocol_Smtp->connect()```
```/var/log/php_error_log #2 /opt/library/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Smtp->_sendMail()```
```/var/log/php_error_log #3 /opt/library/Zend/Mail.php(1197): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail))```
```/var/log/php_error_log #4 /opt//cronjobs/automate_ro.php(472): Zend_Mail->send(Object(Zend_Mail_Transport_Smtp))```
```/var/log/php_error_log #5 {main}```
这是要格式化的方式
```/var/log/php_error_log Stack trace:
/var/log/php_error_log #0 /opt/library/Zend/Mail/Protocol/Smtp.php(167): Zend_Mail_Protocol_Abstract->_connect('tcp://mail.grat...')
/var/log/php_error_log #1 /opt/library/Zend/Mail/Transport/Smtp.php(199): Zend_Mail_Protocol_Smtp->connect()
/var/log/php_error_log #2 /opt/library/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Smtp->_sendMail()
/var/log/php_error_log #3 /opt/library/Zend/Mail.php(1197): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail))
/var/log/php_error_log #4 /opt//cronjobs/automate_ro.php(472): Zend_Mail->send(Object(Zend_Mail_Transport_Smtp))
/var/log/php_error_log #5 {main}```
答案 0 :(得分:1)
使用jq
创建有效载荷,而不是尝试自己逃脱。
post_log () {
log=$1
url=$2
json=$( jq --argjson t "$log" '{text: "```\($t)```"}' )
curl -X POST --silent --data-urlencode "payload=$json" "$url"
}
tail -f "$1" | while read LINE; do
echo "$LINE"
post_log "$LINE" "$2"
done
答案 1 :(得分:0)
为什么不在应用程序中实现独白?在我看来,这种方法是一台戈德堡机器(没有冒犯)。
https://seldaek.github.io/monolog/doc/02-handlers-formatters-processors.html#send-alerts-and-emails