170 похожих чатов

Народ, а как перехватывать logrusом сообщения логгера драйвера go-sql-driver? Например,

packets.go:123: closing bad idle connection: EOF
, которые вываливаются в обход логруса и его форматтера.

Пробовал через mysql.SetLogger, но такие сообщения просто пропадают. В общем, я уже запутался и замучался :/

15 ответов

22 просмотра

https://github.com/simukti/sqldb-logger

Марк Егоров- Автор вопроса
Zver
https://github.com/simukti/sqldb-logger

Я видел. Но не понял, зачем он мне? У меня есть логрус. С ним всё хорошо. Надо только подружить его с драйвером. А это какой-то другой логгер с адаптером под драйвер

Марк Егоров
Я видел. Но не понял, зачем он мне? У меня есть л...

Это прослойка, которая позволяет логировать все операции. И там есть адаптеры под разные логеры. И под тот же самый логрус.

Марк Егоров- Автор вопроса
Zver
Это прослойка, которая позволяет логировать все оп...

Мне не надо все операции логировать. Задача гораздо уже: когда, например, отваливается коннект к бд, в драйвере кроме возврата ошибок есть принт отдельный своим логгером. Вот его и надо обработать. SetLogger метод позволяет переопределить логгер драйвера, но у меня не получается.

Марк Егоров- Автор вопроса
Zver
Это прослойка, которая позволяет логировать все оп...

if err != nil { errLog.Print("closing bad idle connection: ", err) mc.Close() return driver.ErrBadConn }

Марк Егоров
Мне не надо все операции логировать. Задача горазд...

Ну судя по коду в драйвере, переопределяет глобальную переменную. И ее и использует везде потом. Так что SetLogger должно работать.

Марк Егоров- Автор вопроса
Zver
Ну судя по коду в драйвере, переопределяет глобаль...

Я использую логрус глобально(то есть, нигде его не порождая) и переопределяю при старте только форматтер. Поэтому у меня нет какого-то своего экземпляра. В итоге я делаю что-то вроде lg:= *logrus.Logger = и потом mysql.SetLogger(&lg) Только в этом варианте мне удалось скомпилировать без ошибок. Но сообщений этого принта нет. И я не уверен, что работает это верно. Есть подозрение, что тупо подавляет все такие принты, что не есть хорошо.

Марк Егоров
Я использую логрус глобально(то есть, нигде его не...

Но вообще, если вы будете логировать ошибки базы еще, то у вас задвоятся логи.

Марк Егоров- Автор вопроса
Zver
Но вообще, если вы будете логировать ошибки базы е...

Это ж не ошибки базы. Это некоторое количество расставленных принтов(я выше показал пример из драйвера), которые расставлены на каких-то критических участках. Они нужны в принципе только для того, чтобы в случае чего проще было загуглить проблему. Насколько я понял StandartLogger возвращает указатель на тот экземпляр, с которым я по факту работаю. Попробую завтра.

Марк Егоров
Это ж не ошибки базы. Это некоторое количество рас...

Там в коде на эти принты и возвраты оштбок идут.

Марк Егоров- Автор вопроса
Марк Егоров
Я использую логрус глобально(то есть, нигде его не...

будет очень весело, если ты мьютекс скопировал

медленно
будет очень весело, если ты мьютекс скопировал

А при чем тут мьютекс и скопировал? Человек получает указатель и отправляет внутрь указатель на указатель))) Где здесь копирование?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта