vkryukov
LoggerBackends - SQL Logger backends functionality for Elixir v1.15+
Hi, I’ve created an SQL logger backend using LoggerBackends: GitHub - vkryukov/logger_backends_sql · GitHub.
It safely stores all metadata and can be configured to use an existing Repo and/or Schema.
The simplest setup uses an SQLite3 database for logs:
# config/config.exs
config :logger, LoggerBackends.SQL,
level: :debug,
path: "./logs.sqlite"
Logs will be written to the logs table. You can also use an existing repo and customize the table name:
# config/config.exs
config :logger, LoggerBackends.SQL,
repo: MyApp.Repo,
table_name: "log_messages"
You can use your own Schema for log messages - just ensure the schema module defines a changeset/1 function that accepts time, message, and meta arguments.
Feedback welcome!
First Post!
vkryukov
While we are here, I would like people’s thoughts on the best way to configure the backend during the runtime.
LoggerBackends offers configure/2, which can be called like this:
LoggerBackends.configure(LoggerBackends.SQL,
option1: value1,
option2: value2,
...
)
and will send a :configure event to the backend that it can capture. The reference implementation for LoggerBackend.Console is here. This call will only succeed after a backend has already been added with LoggerBackend.add(LoggerBackends.SQL) (as someone needs to listen to these events).
However, you definitely want to set the path to a SQLite log database before adding the backend to perform all the initialization in the backend’s init function.
Something like this would be nice
LoggerBackends.add(LoggerBackends.SQL,
path: "./my.sqlite",
repo: nil
)
However, LoggerBackends.add/2 only processes the :flush option and ignores everything else.
So my current solution is to expose my own configure/1 to do the runtime config:
LoggerBackends.SQL.configure(
path: "./test1.sqlite",
repo: nil
)
LoggerBackends.add(LoggerBackends.SQL)
The previous option with LoggerBackend.add/2 is IMHO cleaner, but requires changing the existing contract.
Thoughts?
Popular in Announcing
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









