setup logger bb


Keywords
BB, LOGGER, LOGGING
License
MIT
Install
pip install bb-logger==0.3.3

Documentation

BB LOGGER

Description

  1. Remove all logger handlers and reformat log record ( can be extended )
  2. Set noti status, controlable by arguments
  3. Override lambda raise error to critical and notice if noti status = True, optional

How

  1. call setup_logging() one time at begin of program
  2. using decorator setup_logging_dec() with each lambda

Params

default_level (int, optional): min log level. Defaults to logging.WARNING.

extend_format (str, optional): custom extend format. Defaults to None.

lambda_exec_error_log (bool, optional): log with critical level for lambda raise exception. Defaults to True. only with decorator setup_logging_dec()

default_noti_level (int, optional): all log from this level will be noticed if no arguments are provided. Defaults to logging.ERROR

force_noti_level (int, optional): force all log with this level to be noticed. Defaults to logging.ERROR.

Notes

(*) extend_format logic

logging format details can be here

  • BASE_FORMAT = '[%(levelname)s]'
  • DEFAULT_FORMAT = BASE_FORMAT + ' %(message)s'
  • if extend_format is specified, FORMAT will be : BASE_FORMAT + '\t'+ extend_format
  • else DEFAULT_FORMAT wil be used  

EXAMPLES

1. Remove all logger handlers and reformat log record

sample code

import logging
from bb_logger import setup_logging

logging.error('before setup, using old handler format')
# setup log with default 
setup_logging()
logging.error('after setup, using new default format')
# setup logger with extend format
setup_logging(extend_format="%(asctime)s - %(message)s")
logging.error('after setup with custom format, using extended format')

output

ERROR:root:before setup, using old handler format
[ERROR] after setup, using new default format
[ERROR]	2021-01-10 18:18:46,202 - after setup with custom format, using extended format

2. Set noti status

ADD NOTI STATUS TO LOG BASE ON CONDITIONS

(*) force_noti_level : default is logging.ERROR

EXAMPLE

import logging
from bb_logger import setup_logging
logging.error('before setup')
# setup log with default 
setup_logging()
logging.error('after setup, noti status was added')

# specify if this log will be noticed or not
logging.warning('warning with noti True', {'noti': True})
logging.warning('warning with noti False', {'noti': False})

# set force noti level
setup_logging(default_level=logging.INFO, force_noti_level=logging.INFO)
logging.info('info with noti True', {'noti': True})
logging.info('info with noti False stil have NOTI status', {'noti': False})

output

[ERROR]	2021-02-06T08:01:56.558Z	c4c3fad9-eacf-41f3-bba1-15b119bfd980	before setup
[ERROR] [NOTI] after setup, noti status was added
[WARNING] [NOTI] warning with noti True
[WARNING] [NOT_NOTI] warning with noti False
[INFO] [NOTI] info with noti True
[INFO] [NOTI] info with noti False stil have NOTI status

Override lambda raise error to critical

EXAMPLE

from bb_logger import setup_logging,setup_logging_dec

@setup_logging_dec(default_level=logging.INFO,lambda_exec_error_log=True, force_noti_level=logging.ERROR)
def lambda_handler(event, context):
    a = 1 / 0

output

[CRITICAL] [NOTI] division by zero
Traceback (most recent call last):
  File "/var/task/bb_logger.py", line 98, in wrapper
    func(*args, **kwargs)
  File "/var/task/lambda_function.py", line 12, in lambda_handler
    a = 1/ 0

exception raise by lambda will be set at Critical level and noticed

NOTE

CloudWatch now accept following pattern:

  • [LEVEL] [NOTI]

Example:

  • "[ERROR] [NOTI] error log" will be matched

  • "some thing before [ERROR] [NOTI] error log" will be matched