add config and filters to logging

Basic logging configuration can now be done in the config.yaml file and
filter has been added to redact the access tokens from the log output.
Closes issue #38
This commit is contained in:
Morgan McMillian 2022-07-01 10:57:16 -07:00
parent 2d4476b9a3
commit ad49c3a354
2 changed files with 45 additions and 6 deletions

View file

@ -13,3 +13,25 @@ MATRIX_PNUT_TOKEN: '<AUTH_TOKEN>' # pnut.io auth token for the matrix bot
PNUTCLIENT_ID: '<CLIENT_ID>' # pnut.io app client ID
PNUT_APPTOKEN: '<APP TOKEN>' # pnut.io app token
PNUT_APPKEY: '<APPSTREAM KEY>' # pnut.io app stream key
logging:
version: 1
formatters:
precise:
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(message)s'
normal:
format: '%(name)s - %(levelname)s - %(message)s'
handlers:
console:
class: logging.StreamHandler
formatter: normal
loggers:
werkzeug:
level: DEBUG
appservice:
level: DEBUG
urllib3.connectionpool:
level: DEBUG
root:
level: DEBUG
handlers: [console]

View file

@ -2,6 +2,7 @@ import websocket
import threading
import time
import logging
import logging.config
import yaml
import json
import pnutpy
@ -9,6 +10,7 @@ import requests
import magic
import argparse
import os
import re
from matrix_client.api import MatrixHttpApi
from matrix_client.api import MatrixError, MatrixRequestError
@ -22,6 +24,21 @@ logger = logging.getLogger()
_shutdown = threading.Event()
_reconnect = threading.Event()
class MLogFilter(logging.Filter):
ACCESS_TOKEN_RE = re.compile(r"(\?.*access(_|%5[Ff])token=)[^&]*(\s.*)$")
ACCESS_TOKEN_RE2 = re.compile(r"(\?.*access(_|%5[Ff])token=)[^&]*(.*)$")
def filter(self, record):
if record.name == "werkzeug" and len(record.args) > 0:
redacted_uri = MLogFilter.ACCESS_TOKEN_RE.sub(r"\1<redacted>\3", record.args[0])
record.args = (redacted_uri, ) + record.args[1:]
elif record.name == "urllib3.connectionpool" and len(record.args) > 3:
redacted_uri = MLogFilter.ACCESS_TOKEN_RE2.sub(r"\1<redacted>\3", record.args[4])
record.args = record.args[:4] + (redacted_uri,) + record.args[5:]
return True
def new_message(msg, meta):
logger.debug("channel: " + msg.channel_id)
logger.debug("username: " + msg.user.username)
@ -368,17 +385,17 @@ if __name__ == '__main__':
# )
args = a_parser.parse_args()
if args.debug:
# websocket.enableTrace(True)
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
configyaml = os.environ.get("CONFIG_FILE")
with open(configyaml, "rb") as config_file:
config = yaml.load(config_file, Loader=yaml.SafeLoader)
# websocket.enableTrace(True)
logging.config.dictConfig(config['logging'])
redact_filter = MLogFilter()
logging.getLogger("werkzeug").addFilter(redact_filter)
logging.getLogger("urllib3.connectionpool").addFilter(redact_filter)
ws_url = 'wss://stream.pnut.io/v1/app?access_token='
ws_url += config['PNUT_APPTOKEN'] + '&key=' + config['PNUT_APPKEY']
ws_url += '&include_raw=1'