Source code for synapse.lib.stormlib.log

import logging

import synapse.exc as s_exc

import synapse.lib.stormtypes as s_stormtypes


logger = logging.getLogger(__name__)

stormlogger = logging.getLogger('synapse.storm.log')

[docs]@s_stormtypes.registry.registerLib class LoggerLib(s_stormtypes.Lib): ''' A Storm library which implements server side logging. These messages are logged to the ``synapse.storm.log`` logger. ''' _storm_locals = ( {'name': 'debug', 'desc': ''' Log a message to the Cortex at the debug log level. Notes: This requires the ``storm.lib.log.debug`` permission to use. Examples: Log a debug message:: $lib.log.debug('I am a debug message!') Log a debug message with extra information:: $lib.log.debug('Extra information included here.', extra=({"key": $valu}))''', 'type': {'type': 'function', '_funcname': '_logDebug', 'args': ( {'name': 'mesg', 'type': 'str', 'desc': 'The message to log.'}, {'name': 'extra', 'type': 'dict', 'desc': 'Extra key / value pairs to include when structured ' 'logging is enabled on the Cortex.', 'default': None, }, ), 'returns': {'type': 'null'}, } }, {'name': 'info', 'desc': ''' Log a message to the Cortex at the info log level. Notes: This requires the ``storm.lib.log.info`` permission to use. Examples: Log an info message:: $lib.log.info('I am a info message!') Log an info message with extra information:: $lib.log.info('Extra information included here.', extra=({"key": $valu}))''', 'type': {'type': 'function', '_funcname': '_logInfo', 'args': ( {'name': 'mesg', 'type': 'str', 'desc': 'The message to log.'}, {'name': 'extra', 'type': 'dict', 'desc': 'Extra key / value pairs to include when structured ' 'logging is enabled on the Cortex.', 'default': None, }, ), 'returns': {'type': 'null'}, } }, {'name': 'warning', 'desc': ''' Log a message to the Cortex at the warning log level. Notes: This requires the ``storm.lib.log.warning`` permission to use. Examples: Log a warning message:: $lib.log.warning('I am a warning message!') Log a warning message with extra information:: $lib.log.warning('Extra information included here.', extra=({"key": $valu}))''', 'type': {'type': 'function', '_funcname': '_logDebug', 'args': ( {'name': 'mesg', 'type': 'str', 'desc': 'The message to log.'}, {'name': 'extra', 'type': 'dict', 'desc': 'Extra key / value pairs to include when structured ' 'logging is enabled on the Cortex.', 'default': None, }, ), 'returns': {'type': 'null'}, } }, {'name': 'error', 'desc': ''' Log a message to the Cortex at the error log level. Notes: This requires the ``storm.lib.log.error`` permission to use. Examples: Log an error message:: $lib.log.error('I am a error message!') Log an error message with extra information:: $lib.log.error('Extra information included here.', extra=({"key": $valu}))''', 'type': {'type': 'function', '_funcname': '_logDebug', 'args': ( {'name': 'mesg', 'type': 'str', 'desc': 'The message to log.'}, {'name': 'extra', 'type': 'dict', 'desc': 'Extra key / value pairs to include when structured ' 'logging is enabled on the Cortex.', 'default': None, }, ), 'returns': {'type': 'null'}, } }, ) _storm_lib_path = ('log',) _storm_lib_perms = ( {'perm': ('storm', 'lib', 'log', 'debug'), 'gate': 'cortex', 'desc': 'Controls the ability to log a debug level message.'}, {'perm': ('storm', 'lib', 'log', 'error'), 'gate': 'cortex', 'desc': 'Controls the ability to log a error level message.'}, {'perm': ('storm', 'lib', 'log', 'info'), 'gate': 'cortex', 'desc': 'Controls the ability to log a info level message.'}, {'perm': ('storm', 'lib', 'log', 'warning'), 'gate': 'cortex', 'desc': 'Controls the ability to log a warning level message.'}, )
[docs] def getObjLocals(self): return { 'info': self._logInfo, 'debug': self._logDebug, 'error': self._logError, 'warning': self._logWarning, }
async def _getExtra(self, extra=None): if extra is None: return extra extra = await s_stormtypes.toprim(extra) if extra and not isinstance(extra, dict): mesg = f'extra provided to log call must be a dictionary compatible type. Got {extra.__class__.__name__} ' \ f'instead.' raise s_exc.BadArg(mesg=mesg, arg='extra') extra = {'synapse': extra} return extra @s_stormtypes.stormfunc(readonly=True) async def _logDebug(self, mesg, extra=None): self.runt.confirm(('storm', 'lib', 'log', 'debug')) mesg = await s_stormtypes.tostr(mesg) extra = await self._getExtra(extra) stormlogger.debug(mesg, extra=extra) return None @s_stormtypes.stormfunc(readonly=True) async def _logInfo(self, mesg, extra=None): self.runt.confirm(('storm', 'lib', 'log', 'info')) mesg = await s_stormtypes.tostr(mesg) extra = await self._getExtra(extra) stormlogger.info(mesg, extra=extra) return None @s_stormtypes.stormfunc(readonly=True) async def _logWarning(self, mesg, extra=None): self.runt.confirm(('storm', 'lib', 'log', 'warning')) mesg = await s_stormtypes.tostr(mesg) extra = await self._getExtra(extra) stormlogger.warning(mesg, extra=extra) return None @s_stormtypes.stormfunc(readonly=True) async def _logError(self, mesg, extra=None): self.runt.confirm(('storm', 'lib', 'log', 'error')) mesg = await s_stormtypes.tostr(mesg) extra = await self._getExtra(extra) stormlogger.error(mesg, extra=extra) return None