Bug 32366 - grep видит текстовый лог как двоичный файл
Summary: grep видит текстовый лог как двоичный файл
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: grep (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-08-09 03:31 MSK by Speccyfighter
Modified: 2016-08-11 17:10 MSK (History)
5 users (show)

See Also:


Attachments
Кириллические строки в логах /var/log/ (3.42 KB, text/plain)
2016-08-09 03:31 MSK, Speccyfighter
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Speccyfighter 2016-08-09 03:31:22 MSK
Created attachment 6791 [details]
Кириллические строки в логах /var/log/

Доброго времени суток!

Из-за логгирования на русском, grep воспринимает текстовый лог как бинарный

# grep -rHi . /var/log|grep 'Двоичный файл'|grep 'messages\|warnings'
Двоичный файл /var/log/daemons/warnings совпадает
Двоичный файл /var/log/syslog/messages совпадает
Двоичный файл /var/log/user/warnings совпадает

Причина кроется вот в чём:
если приложение выбрасывает в лог сообщение на русском, то в словах вместо некоторых кириллических символов отображается не символ, а его код. И если лог содержит такие сообщения, то grep воспринимает лог как бинарный файл.
Опция --text для grep, поможет отобразить текстовый лог, но кириллические строки либо плохо читаемы, либо нечитабельны совсем.

Эти логи не учитывались и были отброшены сразу как бинарные:

# file /var/log/{sa/sa06,wtmp,lastlog}
/var/log/sa/sa06: data
/var/log/wtmp:    data
/var/log/lastlog: data

/var/log/sa* - через sar
/var/log/wtmp - utmpdump или last
/var/log/lastlog - lastlog

Во вложении grep-нутые кириллические строки из логов, - так как они отображаются при просмотре.
Comment 1 Speccyfighter 2016-08-09 03:53:54 MSK
Предложение:
Хорошо бы всё логгировать только на английском.
Comment 2 Dmitry V. Levin 2016-08-09 04:18:09 MSK
(In reply to comment #0)
> Из-за логгирования на русском, grep воспринимает текстовый лог как бинарный

Не надо логгировать на русском.

(In reply to comment #1)
> Предложение:
> Хорошо бы всё логгировать только на английском.

Это точно предложение к grep'у?
Comment 3 Evgenii Terechkov 2016-08-09 08:02:42 MSK
Насколько помнится, распознавание байтов как символов языка регулируется локалью. Просто установите нужную локаль и grep будет понимать русский.

Что конечно не отменяет того, что не нужно протоколировать на национальных языках.
Comment 4 Michael Shigorin 2016-08-09 09:59:11 MSK
Или локаль, или grep -a.
Comment 5 Speccyfighter 2016-08-11 14:35:04 MSK
(В ответ на комментарий №2)
> (In reply to comment #0)
> > Из-за логгирования на русском, grep воспринимает текстовый лог как бинарный
> 
> Не надо логгировать на русском.

Согласен.

> (In reply to comment #1)
> > Предложение:
> > Хорошо бы всё логгировать только на английском.
> 
> Это точно предложение к grep'у?

Согласен:
Надо перевешивать на pulseaudio и gdm2.20

В лог кириллицу gdm-binary выплёвывает:

# grep -rHi . --text /var/log|grep --text '202ал'
/var/log/daemons/warnings:May  2 14:14:00 comp gdm-binary[2089]: WARNING: gdm_slave_xioerror_handler: Фа�\202ал�\214на�\217 о�\210ибка X - �\237е�\200езап�\203�\201к :0 

$ rpm -qf $(which gdm-binary)
gdm2.20-2.20.8-alt10

С пульсаудией вместе, - из того же лога во вложении:

/var/log/syslog/messages:May  2 13:44:44 comp pulseaudio[2282]: [pulseaudio] authkey.c: Failed to open cookie file '/home/user/.config/pulse/cookie': �\235е�\202 �\202акого �\204айла или ка�\202алога
Comment 6 Speccyfighter 2016-08-11 15:36:05 MSK
(В ответ на комментарий №3)
> Насколько помнится, распознавание байтов как символов языка регулируется
> локалью. Просто установите нужную локаль и grep будет понимать русский.

Не будет :)
Оно уже в логе.

Текстовый вид:

�\202акого

hex-код:

D1 5C 32 30 32 D0 B0 D0 BA D0 BE D0 B3 D0 BE

Кириллические символы двухбайтные.
В слове: такого (или Т ?)
первый байт первого символа - D1
Вместо второго байта, последовательность байт:
5C 32 30 32
\202

> Что конечно не отменяет того, что не нужно протоколировать на национальных
> языках.

:) А это да.
Comment 7 Speccyfighter 2016-08-11 15:38:30 MSK
(В ответ на комментарий №4)
> Или локаль, или grep -a.

Так и удалось рекурсивно грепнуть.
Comment 8 Speccyfighter 2016-08-11 15:49:26 MSK
(В ответ на комментарий №5)
> (В ответ на комментарий №2)
> > (In reply to comment #0)
> > ...
> 
> > (In reply to comment #1)
> > > Предложение:
> > > Хорошо бы всё логгировать только на английском.
> > 
> > Это точно предложение к grep'у?
> 
> Согласен:
> Надо перевешивать на pulseaudio и gdm2.20
> 
> В лог кириллицу gdm-binary выплёвывает:
> 
> # grep -rHi . --text /var/log|grep --text '202ал'
> /var/log/daemons/warnings:May  2 14:14:00 comp gdm-binary[2089]: WARNING:
> gdm_slave_xioerror_handler: Фа�\202ал�\214на�\217 о�\210ибка X -
> �\237е�\200езап�\203�\201к :0 
> 
> $ rpm -qf $(which gdm-binary)
> gdm2.20-2.20.8-alt10
> 
> С пульсаудией вместе, - из того же лога во вложении:
> 
> /var/log/syslog/messages:May  2 13:44:44 comp pulseaudio[2282]: [pulseaudio]
> authkey.c: Failed to open cookie file '/home/user/.config/pulse/cookie':
> �\235е�\202 �\202акого �\204айла или ка�\202алога

Сейчас в системе alsa, а не pulseaudio, поэтому не соображу, могу только догадываться, что для пульсаудии вешать багу надо на пакет pulseaudio-daemon.
Comment 9 Speccyfighter 2016-08-11 17:10:55 MSK
Посмотрел на то что отрепортил, как бы со стороны:
https://forum.altlinux.org/index.php?topic=36322.msg292502#msg292502