Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

Как все-таки правильно писать логи на С?

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

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

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

Кто как решил для себя проблему логгирования в С?
Tags: c, linux
Subscribe

  • Дела телескопные

    Воистину, рукожопие человеческое пределов не имеет. По прогнозу нам обещают более-менее нормальное небо через пару дней, поэтому сегодня днем решил…

  • Robotel-2

    В спешном порядке я нарисовал "демон погоды" для мониторинга облачности, чтобы запустить и второй телескоп. В конце года мы с Тимуром примерно…

  • Масштабы

    Сейчас из дома параллельно провожу технические наблюдения на Z-1000 и полуметровом астросибе. На Цейссе провожу мониторинг (примерно по часу на…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 29 comments

  • Дела телескопные

    Воистину, рукожопие человеческое пределов не имеет. По прогнозу нам обещают более-менее нормальное небо через пару дней, поэтому сегодня днем решил…

  • Robotel-2

    В спешном порядке я нарисовал "демон погоды" для мониторинга облачности, чтобы запустить и второй телескоп. В конце года мы с Тимуром примерно…

  • Масштабы

    Сейчас из дома параллельно провожу технические наблюдения на Z-1000 и полуметровом астросибе. На Цейссе провожу мониторинг (примерно по часу на…