Привет. Я сделал гибкую систему для ведения логов. Я в конфиг могу добавлять новые типы логов и удалять их
"Types" : [
"Debug",
"Info",
"Warn",
"Error",
"Fatal"
]
Также я могу с лёгкостью добавить тип о котором надо уведомлять на емейл
"EmailSend" : [
"Error",
"Fatal"
]
Теперь об архитектуре
Есть библиотека которую я использую в своём коде. Её использование элементарно
logs.New("Debug","test")
Она проверяет данные и пишет их в формате
('time log','type log','message log'),('time log','type log','message log'),('time log','type log','message log')
в редис. В фоне висит демон который каждые n-секунд удаляет данные с редиса и помещает их пачкой в бд (на данный момент в mysql). В итоге я могу хоть 800к логов загнать в бд без большой нагрузки на неё. Какие будут советы по улучшению моей поделки? стоит о ней писать статейку на хабре и заливать на github ? Всем спасибо.
UPD
Данные в редисе
pastebin.com/PUvLpRgL
Конфиг
pastebin.com/GeZxCnGU
Из данных в редисе я удаляю последнюю кому и пихаю их в sql запрос
DB.Exec("INSERT INTO " + MysqlTable + " (type,time,messages) VALUES" + strings.TrimRight(data, ","))
И обновляю данные в редисе на пробел. И так в вечном цикле (он тормозит с помощью time.Sleep на количество секунд указанных в конфиге)
Я только что 1 000 000 записей в мускуль добавил за 25мс на слабеньком впс (частота 1.6; 1ядро, 2 гб озу) в коробочной конфигурации.
Статья + весь код на
хабре