Что скажете о моей реализации логирования?
1. Заменить строки константами, желательно числовыми. Будет меньше вероятности ошибиться, ибо константы проверяются при компиляции, плюс, работать будет быстрее (в случае числовых констант).
2. Стоит попробовать RabbitMq для управления очередью записи в БД вместо велосипеда. Или можно попробовать специализированные БД, которые созданы именно для хранения логов.
Посмотрите в сторону уже готовых систем логирования (Graphite, influxdb, прочее) и мониторинга (mrtg, rrd).
Качество вашего кода и дизайна самого приложения прилично низкое. Бенчмарков не делали вообще никаких. Не поймите не правильно, код читается не плохо, достаточно чистый, но по сути бесполезный.
По поводу бенчмарков. Вы утверждаете что "вставка в редис"+"вставка в mysql" работает быстрее чем "вставка в mysql". Это по меньшей мере выглядит заблуждением, потому что тот же редис на том же сервере (на сколько я понял) и производительности прибавить не может. Изменился разве что немного подход к записи в MySQL.
Варианты которые у вас были при написании своего логера:
1. писать в MySQL по запросу каждый раз когда срабатывает некое событие и появляется запись в логе
2. накапливать пачку логов в оперативной памяти - пушить в MySQL точно так же как после редиса (долой редис), за одно научитесь ограничивать потребление памяти (вы ведь не можете бесконечно склодировать данные)
3. накапливать пачку логов в файл (банальный бинарный файл), раз в N минут менять лог-файл
4. вариант тот же что и третий, только старые логи переносить в базу в фоне.
Тут надо так же обратить внимание на то для чего логи пишутся:
1. что бы точно знать кто где и что делал (доктилоскопия пользователей)
2. что бы делать реал-тайм подстройку других алгоритмов в зависимости от поведения пользователей, системы и всего такого
3. что бы просто быть в курсе что приложение упало (кстати в этом случае ваш код отправит емейл?:))
У меня есть задача по сохранении метрики всякой. Условия:
1. MySQL - для показа потом агрегированных графиков и просто списков что сделалось за определённый промежуток времени.
2. Shared-хостинг где можно запускать бинарники, но нельзя делать fork'и и по сути ставить ничего кроме Golang приложения и PHP скриптов.
3. Golang приложение которое щёлкает задачки как семечки и метрик просто туча - считай только их и писать.
Без накопления и группировки MySQL только и занимается что вставкой в таблицу с метрикой. В планах хранить в бинарных блобах. Ставить тот же Графит на Shared-хостинг для такой простой задачки считаю избыточно:)