Логи Apache и текст в UTF-8

Заметил одну интересную вещь с логами приложений на php. Если приложение использует вывод отладочной информации в error_log, то в логах php-fpm все сообщения в UTF-8 нормально отображаются. В логах Apache же вместо слова “Ошибка:” будет написано что-то вроде “\xd0\x9e\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd0\xb0:”, что читать совершенно неудобно.

Это совершенно нормальное поведение для apache версии 2.0.49+, там весь вывод в логи экранируют от подозрительных символов. Эту фишку можно отключить, если пересобрать apache с опцией CFLAGS=”-DAP_UNSAFE_ERROR_LOG_UNESCAPED”, но это неудобно – хотелось бы, чтобы была возможность читать логи без танцев с бубном. В результате родился скрипт, декодирующий подобные последовательности символов в нормальные строки в UTF-8:

#!/bin/sh
if [[ $# -eq 0 ]] ; then
    echo "Usage: $0 apache_log_file_name"
    echo "Символы utf8 будут декодированы из вида \\xd0\\xa3\\xd0\\xbf\\xd1\\x80\\xd0\\xb0 в нормальные символы UTF-8"
    exit 0
fi

if [[ $# -eq 1 ]] ; then
    /usr/bin/tail -f "$1" | while read -r line; do echo -e "$line"; done;
fi

Оставить комментарий

Почта (не публикуется) Обязательные поля помечены *

*

Вы можете использовать эти HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>