Предоставляет ли uClibc/glibc какую-либо функцию для перенаправления ошибок в системный журнал?

Предоставляет ли uClibc/glibc какую-либо функцию для перенаправления ошибок в системный журнал? Такие ошибки, как «не удается разрешить символ», необходимо отправлять в системный журнал, а не в стандартный вывод на консоли.


person Lunar Mushrooms    schedule 18.11.2011    source источник
comment
здесь тот же вопрос о SO /   -  person Sergei Nikulov    schedule 18.11.2011
comment
Почему такие ошибки происходят в первую очередь? Любое сообщение, сгенерированное libc, указывает на ошибки в вашей программе или цепочке инструментов сборки и не должно появляться в производственной среде...   -  person R.. GitHub STOP HELPING ICE    schedule 18.11.2011
comment
Я хочу убедиться, что таких ошибок не происходит в производственной среде. Я счастлив, если системный журнал пуст после выполнения производственного кода :-). Но мне нужно подтвердить это, заглянув в системный журнал. Обратите внимание, что речь идет не только о кодировании. Какой-нибудь забавный пользователь мог загрузить старую версию библиотеки в рабочей среде. Без системы регистрации это было бы сложно.   -  person Lunar Mushrooms    schedule 18.11.2011
comment
@LunarMushrooms: Для glibc Фред уже предоставил ссылки. syslog-вызовы доступны на uClibc (по крайней мере, из источника) syslog. h & syslog.c   -  person another.anon.coward    schedule 18.11.2011
comment
Что здесь сложно, так это то, что ошибки, возникающие внутри кода glibc (например, не удается разрешить символ), также должны быть зарегистрированы. Не только ошибки приложения. Я быстро просмотрел исходники uclibc. Я не смог найти там никакого перенаправления на системный журнал (он все равно реализует системный журнал). Поэтому я считаю, что такой функции не существует.   -  person Lunar Mushrooms    schedule 18.11.2011


Ответы (1)


Если это демон, лучше всего использовать способный к этому init (например, InitNG). Если это невозможно, вы можете заменить stderr раньше (не так приятно, но если нет другого варианта...):

#!/bin/sh
init 2>&1 >/dev/console | tee /dev/console | logger

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

person Ismael Luceno    schedule 25.12.2011