LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

Прога не лаботаторная и работает уже пол года в проде под высокой нагрузкой. Мне было интересно все низкоуровневые вещи реализовать ручками: обработка коннектов через kqueue во фре и epool в линуксе, каждый коннект в отдельном треде с последующей передачей задач в очередь.

Если у тебя по треду на соединение и тебе этого хватает, то вряд ли нагрузка высокая.

Вот осталось разрулить все моменты с сигналами и считай цель достигнута.

Если ты так хочешь сам всё это разруливать, то сделай ротацию иначе: пиши логи в pipe вместо файла и сделай отдельный тред или даже процесс, который будет брать строчки из этого pipe и писать их в файл. Тогда никаких локов тебе не понадобится. Как вариант, если сделаешь отдельный процесс, то можешь ему в stdin свои логи писать. Это ещё проще будет.

Но я бы на твоём месте всё ещё взял syslog.

Исходная версия hateyoufeel, :

Прога не лаботаторная и работает уже пол года в проде под высокой нагрузкой. Мне было интересно все низкоуровневые вещи реализовать ручками: обработка коннектов через kqueue во фре и epool в линуксе, каждый коннект в отдельном треде с последующей передачей задач в очередь.

Если у тебя по треду на соединение и тебе этого хватает, то вряд ли нагрузка высокая.

Вот осталось разрулить все моменты с сигналами и считай цель достигнута.

Если ты так хочешь сам всё это разруливать, то сделай ротацию иначе: пиши логи в pipe вместо файла и сделай отдельный тред или даже процесс, который будет брать строчки из этого pipe и писать их в файл. Тогда никаких локов тебе не понадобится. Как вариант, если сделаешь отдельный процесс, то можешь ему в stdin свои логи писать. Это ещё проще будет.