Фильтрация журналов командной строки со встроенного сервера PHP - PullRequest
0 голосов
/ 10 февраля 2020

PHP имеет встроенный файловый сервер для тестирования и разработки.

После открытия страницы в веб-браузере вывод сервера на консоль выглядит следующим образом:

$ php -S localhost:8000
PHP 7.2.8 Development Server started at Sun Feb  9 23:09:17 2020
Listening on http://localhost:8000
Document root is /_PATHTOFILE_
Press Ctrl-C to quit.
[Sun Feb  9 23:09:19 2020] ::1:57697 [200]: /
[Sun Feb  9 23:09:19 2020] ::1:57698 [404]: /doesnt-exist.js - No such file or directory

Как отфильтровать все строки, включающие [200], так как меня интересуют только предупреждения и ошибки?

Я безуспешно пытался следующее:

  • $ php -S localhost:8000 | grep --line-buffered --invert-match "200" | awk '{print $3}'
  • $ php -S localhost:8000 | awk '!/200/{print $3}'

Обе команды не фильтруют строки, они просто регистрируют следующее:

[Sun Feb  9 23:09:19 2020] ::1:57697 [200]: /
[Sun Feb  9 23:09:19 2020] ::1:57698 [404]: /doesnt-exist.js - No such file or directory

Что мне здесь не хватает?

1 Ответ

1 голос
/ 23 февраля 2020

Журналы php -S ... печатаются в stderr, а не в stdout, вам также необходимо отфильтровать stderr. Без фильтрации:

$ php -S localhost:8888
PHP 5.6.40-0+deb8u7 Development Server started at Sun Feb 23 12:58:30 2020
Listening on http://localhost:8888
Document root is /home/sorin/tmp
Press Ctrl-C to quit.
[Sun Feb 23 12:58:33 2020] this is an error
[Sun Feb 23 12:58:33 2020] 127.0.0.1:52825 [200]: /test.php
^C

Перенаправление stderr на стандартный вывод:

php -S localhost:8888 2>&1 | grep -v '\[200\]'
        [Sun Feb 23 12:59:41 2020] this is an error

Тестовый файл:

cat test.php
<?php

error_log('this is an error');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...