From 3aa37eb26602d2f45b20d13221f2bfb8a8d2f6c9 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Wed, 21 Mar 2018 10:14:49 -0400 Subject: [PATCH] Add a log handler for external python modules --- .../external/python/metasploit/module.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/lib/msf/core/modules/external/python/metasploit/module.py b/lib/msf/core/modules/external/python/metasploit/module.py index 6470effe0e..bec3112a61 100644 --- a/lib/msf/core/modules/external/python/metasploit/module.py +++ b/lib/msf/core/modules/external/python/metasploit/module.py @@ -1,8 +1,43 @@ import json +import logging import os import sys +class LogFormatter(logging.Formatter): + def __init__(self, prefix, *args, **kwargs): + super(LogFormatter, self).__init__(*args, **kwargs) + self.prefix = prefix + + def format(self, record): + return self.prefix + record.msg + + +class LogHandler(logging.Handler): + def emit(self, record): + level = 'debug' + if record.levelno >= logging.ERROR: + level = 'error' + elif record.levelno >= logging.WARNING: + level = 'warning' + elif record.levelno >= logging.INFO: + level = 'info' + log(self.format(record), level) + return + + @classmethod + def setup(cls, level=logging.DEBUG, name=None, msg_prefix=None): + logger = logging.getLogger(name) + handler = cls() + + if level is not None: + logger.setLevel(level) + if msg_prefix is not None: + handler.setFormatter(LogFormatter(msg_prefix)) + logger.addHandler(handler) + return handler + + def log(message, level='info'): rpc_send({'jsonrpc': '2.0', 'method': 'message', 'params': { 'level': level,