eddy_em: (Default)
[personal profile] eddy_em
Задал вопрос на SO.
С логами я уже давно вожусь: много демонов требуют ведения журналов, но все у меня сделано, как обычно, через одно место! В моей сниппетобиблиотеке ведется учет времени с момента создания лога, и если файл старше суток, он автоматически ротируется. Но это: а) лишает возможности работы, если сначала открыл лог, а потом сделал fork() (один из процессов продолжит писать после ротации логов в старый лог), б) не очень-то это атомарно (хотя пока что прецедентов, когда логи портятся из-за одновременной записи в нескольких потоков не было; но это, скорей всего, из-за того, что логи пишутся редко).
Другой вариант продемонстрирован в коде на SO. И здесь тоже полная фигня с fork() и атомарностью.

Как вариант — вообще убрать openlog, а в putlog сразу делать все: открывать файл в режиме добавления данных, писать туда, закрывать файл. Для надежности можно добавить мьютекс. Но это чревато раздуванием аргументов putlog'а (либо структуру придется передавать): помимо уровня сообщения и собственно самого сообщения, надо будет каждый раз передавать уровень лог-файла и его имя, если захотеть иметь возможность одновременного ведения нескольких журналов.

Использовать жирные библиотеки вроде log4c не хочу.

Кто как решил для себя проблему логгирования в С?
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

May 2025

S M T W T F S
    123
45678910
11121314151617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 25th, 2025 12:56 am
Powered by Dreamwidth Studios