Bash, чтобы ослабить отчет журнала ошибок - PullRequest
0 голосов
/ 02 июля 2018

В настоящее время у меня есть скрипт, который отслеживает наш журнал ошибок и отправляет журналы на наш слабый канал. Как я могу заставить его отправлять всю ошибку, а не построчно. Это то, что у меня есть в настоящее время, и одна ошибка отправляется сотнями однострочных сообщений.

    #!/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 голосов
/ 02 июля 2018

Используйте 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
0 голосов
/ 02 июля 2018

почему бы не реализовать монолог в приложении? Этот подход кажется мне машиной Гольдберга (без обид).

https://seldaek.github.io/monolog/doc/02-handlers-formatters-processors.html#send-alerts-and-emails

  • SlackbotHandler: регистрирует записи в учетной записи Slack, используя Slackbot входящий крюк.
  • SlackWebhookHandler: регистрирует записи в учетной записи Slack с помощью Slack Webhooks.
  • SlackHandler: регистрирует записи в учетной записи Slack используя Slack API (сложная настройка).
...