Habilitando Logs Query no Mongodb utilizando Go

Uma das formas de debugar uma aplicação é através dos logs. Eles podem ser usados para identificar problemas, entender o fluxo de execução e também para monitorar o comportamento da aplicação. Dentre os seus tipos, os logs de query de banco de dados são muito úteis para entender o que está acontecendo com consultas e outras operações de escrita. Neste post vou mostrar como habilitar os logs de query do MongoDB no driver oficial para Go.
Por padrão, os logs no driver oficial do MongoDB para Go são desabilitados. Para habilitá-los, basta usar implementar o seu próprio CommandMonitor
e setá-lo na configuração do ClientOptions
.
Sempre que trabalho com conexão de banco de dados, gosto de criar uma struct que serve para conter as informações necessárias para a conexão. Nesse caso, vou criar uma struct chamada MongoConfig
.
Após isso, eu implemento uma função createMongoClient
chamada que recebe essa struct de Configuração e retorna um *mongo.Client
. A vantagem de passar as configurações via struct é caso você queira adicionar outros parâmetros como ConnectionTimeout
ou MaxPoolSize
por exemplo, você não precisa alterar a assinatura da função de conexão.
Após isso eu utilizo a função para criar o client do MongoDB e executar operações na minha aplicação.
Exemplos de logs de algumas operações:
PING
2023/09/02 08:48:09 INFO {"ping": {"$numberInt":"1"},"lsid": {"id": {"$binary":{"base64":"HBu0mDZaRHaNx0TPpBcaeg==","subType":"04"}}},"$db": "admin"}
INSERT
2023/09/02 09:04:43 INFO {"insert": "users","ordered": true,"lsid": {"id": {"$binary":{"base64":"ZIZW5N5OR+ympGFggFu6uA==","subType":"04"}}},"$db": "example-mongo","documents": [{"_id": {"$oid":"64f324db99a1dac5fdc37251"},"name": "Eduardo","alias": "eduardohitek","site": "https://eduardohitek.dev"}]}
FIND
2023/09/02 09:05:59 INFO {"find": "users","filter": {"alias": "eduardohitek"},"lsid": {"id": {"$binary":{"base64":"+ji9+sJIRVC0HsawBmTAPw==","subType":"04"}}},"$db": "example-mongo"}
Aqui está um gist com o código utilizado no post.