重击到松弛错误日志报告

时间:2018-07-02 13:01:57

标签: bash curl slack tail

我目前有一个脚本,该脚本跟踪我们的错误日志并将日志发送到我们的闲置通道。我如何获取它来发送整个错误而不是逐行发送。这就是我目前的情况,一个错误被发送为数百条单行帖子。

    #!/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}```

2 个答案:

答案 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

  • SlackbotHandler:使用Slackbot将记录记录到Slack帐户 传入钩子。
  • SlackWebhookHandler:使用Slack Webhooks将记录记录到Slack帐户中。
  • SlackHandler:将记录记录到Slack帐户 使用Slack API(复杂设置)。