Logging is configurable

This commit is contained in:
Éloi Rivard 2021-10-31 14:40:12 +01:00
parent 7e5dccd7eb
commit 033639a955
4 changed files with 53 additions and 0 deletions

View file

@ -18,6 +18,7 @@ import canaille.well_known
from flask import Flask, g, request, session from flask import Flask, g, request, session
from flask_babel import Babel from flask_babel import Babel
from flask_themer import Themer, render_template, FileSystemThemeLoader from flask_themer import Themer, render_template, FileSystemThemeLoader
from logging.config import dictConfig
from .flaskutils import current_user from .flaskutils import current_user
from .ldaputils import LDAPObject from .ldaputils import LDAPObject
@ -90,11 +91,42 @@ def teardown_ldap_connection(app):
g.ldap.unbind_s() g.ldap.unbind_s()
def setup_logging(app):
log_level = app.config.get("LOGGING", {}).get("LEVEL", "WARNING")
if not app.config.get("LOGGING", {}).get("PATH"):
handler = {
"class": "logging.StreamHandler",
"stream": "ext://flask.logging.wsgi_errors_stream",
"formatter": "default",
}
else:
handler = {
"class": "logging.handlers.WatchedFileHandler",
"filename": app.config["LOGGING"]["PATH"],
"formatter": "default",
}
dictConfig(
{
"version": 1,
"formatters": {
"default": {
"format": "[%(asctime)s] %(levelname)s in %(module)s: %(message)s",
}
},
"handlers": {"wsgi": handler},
"root": {"level": log_level, "handlers": ["wsgi"]},
}
)
def setup_app(app): def setup_app(app):
if SENTRY and app.config.get("SENTRY_DSN"): if SENTRY and app.config.get("SENTRY_DSN"):
sentry_sdk.init(dsn=app.config["SENTRY_DSN"], integrations=[FlaskIntegration()]) sentry_sdk.init(dsn=app.config["SENTRY_DSN"], integrations=[FlaskIntegration()])
try: try:
setup_logging(app)
LDAPObject.root_dn = app.config["LDAP"]["ROOT_DN"] LDAPObject.root_dn = app.config["LDAP"]["ROOT_DN"]
user_base = app.config["LDAP"]["USER_BASE"] user_base = app.config["LDAP"]["USER_BASE"]
if user_base.endswith(app.config["LDAP"]["ROOT_DN"]): if user_base.endswith(app.config["LDAP"]["ROOT_DN"]):

View file

@ -44,6 +44,15 @@ OIDC_METADATA_FILE = "canaille/conf/openid-configuration.json"
# account. The default value is true. # account. The default value is true.
# SELF_DELETION = true # SELF_DELETION = true
[LOGGING]
# LEVEL can be one value among:
# DEBUG, INFO, WARNING, ERROR, CRITICAL
# LEVEL = "WARNING"
# The path of the log file. If not set (the default) logs are
# written in the standard error output.
# PATH = ""
[LDAP] [LDAP]
URI = "ldap://ldap" URI = "ldap://ldap"
ROOT_DN = "dc=mydomain,dc=tld" ROOT_DN = "dc=mydomain,dc=tld"

View file

@ -44,6 +44,17 @@ OIDC_METADATA_FILE = "conf/openid-configuration.json"
# account. The default value is true. # account. The default value is true.
# SELF_DELETION = true # SELF_DELETION = true
[LOGGING]
# LEVEL can be one value among:
# DEBUG, INFO, WARNING, ERROR, CRITICAL
# Defaults to WARNING
# LEVEL = "WARNING"
LEVEL = "DEBUG"
# The path of the log file. If not set (the default) logs are
# written in the standard error output.
# PATH = ""
[LDAP] [LDAP]
URI = "ldap://127.0.0.1:5389" URI = "ldap://127.0.0.1:5389"
ROOT_DN = "dc=mydomain,dc=tld" ROOT_DN = "dc=mydomain,dc=tld"

View file

@ -128,6 +128,7 @@ def configuration(slapd_server, smtpd, keypair_path):
"SECRET_KEY": gen_salt(24), "SECRET_KEY": gen_salt(24),
"OAUTH2_METADATA_FILE": "canaille/conf/oauth-authorization-server.sample.json", "OAUTH2_METADATA_FILE": "canaille/conf/oauth-authorization-server.sample.json",
"OIDC_METADATA_FILE": "canaille/conf/openid-configuration.sample.json", "OIDC_METADATA_FILE": "canaille/conf/openid-configuration.sample.json",
"LOGGING": {},
"LDAP": { "LDAP": {
"ROOT_DN": slapd_server.suffix, "ROOT_DN": slapd_server.suffix,
"URI": slapd_server.ldap_uri, "URI": slapd_server.ldap_uri,