I just started using sanic, and I’d like to log with syslog to /dev/log on linux.
I tried finding out how to do it from the docs, and I found an old version’s docs that stated it is possible to do it with the right log config. The newest version’s documentation doesn’t mention syslog. Please help. How can I use sanic’s logger with syslog?
Hello, @AcidicNut!
Sorry for taking so long to answer you. Sanic, by default, have an internal dict
that is used to configure logging: sanic.log.LOGGING_CONFIG_DEFAULTS
(you can see more about it in the source code).
When creating an app using the Sanic
constructor, it accepts a keyword argument called log_config
, which defaults to None
and is set to sanic.log.LOGGING_CONFIG_DEFAULTS
in case this case.
All you need to do is create your own logging configuration (as a dict), or quickly modify the existent one (as a proof of concept):
from sanic import Sanic, response
from sanic.log import LOGGING_CONFIG_DEFAULTS
_handler = {
"class": "logging.handlers.SysLogHandler",
"formatter": "generic",
"address": "/dev/log"
}
LOGGING_CONFIG_DEFAULTS["handlers"]["console"] = _handler
LOGGING_CONFIG_DEFAULTS["handlers"]["error_console"] = _handler
LOGGING_CONFIG_DEFAULTS["handlers"]["access_console"] = _handler
app = Sanic(__name__, log_config=LOGGING_CONFIG_DEFAULTS)
@app.route("/")
async def test(request):
return response.json({"test": True})
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8000)
This should be enough for you to see logs appearing in your syslog
1 Like