These code samples are for the blog post Dynamic logging control for serverless without redeploying at:
http://www.sensedeep.com/blog/posts/stories/dynamic-serverless-log-control.html
import Bunyan from 'bunyan' | |
let {LOG_FILTER, LOG_OVERRIDE, LOG_SAMPLE} = process.env | |
if (LOG_OVERRIDE != null) { | |
let [expire, level] = LOG_OVERRIDE.split(':') | |
if (level && Date.now() < expire) { | |
LOG_FILTER = level | |
} | |
} | |
let sample = 0, sampleRate, sampleLevel | |
if (LOG_SAMPLE != null) { | |
[sampleRate, sampleLevel] = LOG_SAMPLE.split(':') | |
} | |
const bunyan = Bunyan.createLogger({name: 'bunyan', level: LOG_FILTER}) | |
exports.handler = async (event, context) => { | |
if (sampleRate && (sample++ % (100 / sampleRate)) == 0) { | |
bunyan.level = sampleLevel | |
} | |
bunyan.debug('Debug message') | |
return 'done' | |
} |
import Debug from 'debug' | |
let {LOG_FILTER, LOG_OVERRIDE, LOG_SAMPLE} = process.env | |
if (LOG_OVERRIDE != null) { | |
let [expire, level] = LOG_OVERRIDE.split(':') | |
if (level && Date.now() < expire) { | |
LOG_FILTER = level | |
} | |
} | |
let sample = 0, sampleRate, sampleLevel | |
if (LOG_SAMPLE != null) { | |
[sampleRate, sampleLevel] = LOG_SAMPLE.split(':') | |
} | |
Debug.enable(LOG_FILTER) | |
exports.handler = async (event, context) => { | |
if (sampleRate && (sample++ % (100 / sampleRate)) == 0) { | |
debug.enable(sampleLevel) | |
} | |
Debug('debug')('Debug message') | |
return 'done' | |
} |
These code samples are for the blog post Dynamic logging control for serverless without redeploying at:
http://www.sensedeep.com/blog/posts/stories/dynamic-serverless-log-control.html
import Pino from 'pino' | |
let {LOG_FILTER, LOG_OVERRIDE, LOG_SAMPLE} = process.env | |
if (LOG_OVERRIDE != null) { | |
let [expire, level] = LOG_OVERRIDE.split(':') | |
if (level && Date.now() < expire) { | |
LOG_FILTER = level | |
} | |
} | |
let sample = 0, sampleRate, sampleLevel | |
if (LOG_SAMPLE != null) { | |
[sampleRate, sampleLevel] = LOG_SAMPLE.split(':') | |
} | |
const pino = Pino({name: 'pino', level: LOG_FILTER}) | |
exports.handler = async (event, context) => { | |
if (sampleRate && (sample++ % (100 / sampleRate)) == 0) { | |
pino.level = sampleLevel | |
} | |
pino.debug('Debug message') | |
return 'done' | |
} |
import os | |
import logging | |
from datetime import datetime | |
LOG_FILTER = os.environ.get('LOG_FILTER') | |
LOG_OVERRIDE = os.environ.get('LOG_OVERRIDE') | |
LOG_SAMPLE = os.environ.get('LOG_SAMPLE') | |
sample = 0 | |
sampleRate = 0 | |
sampleLevel = None | |
if LOG_SAMPLE != None: | |
sampleRate, sampleLevel = LOG_SAMPLE.split(':') | |
if LOG_OVERRIDE != None: | |
when, level = LOG_OVERRIDE.split(':') | |
if level and int(datetime.today().timestamp()) < int(when): | |
LOG_FILTER = level | |
logging.basicConfig(level = int(LOG_FILTER)) | |
log = logging.getLogger() | |
def lambda_handler(event, context): | |
sample = sample + 1 | |
if sampleRate and (sample % (100 / sampleRate)) == 0: | |
log.setLevel(int(sampleLevel)) | |
log.info("Hello World") | |
return 'done' |
import SenseLogs from 'senselogs' | |
let log = new SenseLogs() | |
exports.handler = async (event, context) => { | |
// This will be emitted if LOG_FILTER contains 'debug' as a log level | |
log.debug('Hello world') | |
// EMF metrics can also be dynamically controlled | |
log.metrics('metrics', 'AcmeRockets/CriticalLaunchFailure', {explosion: 1}) | |
return 'done' | |
} |
import Winston from 'winston' | |
let {LOG_FILTER, LOG_OVERRIDE, LOG_SAMPLE} = process.env | |
if (LOG_OVERRIDE != null) { | |
let [expire, level] = LOG_OVERRIDE.split(':') | |
if (level && Date.now() < expire) { | |
LOG_FILTER = level | |
} | |
} | |
let sample = 0, sampleRate, sampleLevel | |
if (LOG_SAMPLE != null) { | |
[sampleRate, sampleLevel] = LOG_SAMPLE.split(':') | |
} | |
const winston = Winston.createLogger({ | |
level: LOG_FILTER, | |
transports: [new Winston.transports.Console()], | |
}) | |
exports.handler = async (event, context) => { | |
if (sampleRate && (sample++ % (100 / sampleRate)) == 0) { | |
winston.transports[0].level = sampleLevel | |
} | |
winston.debug('Debug message') | |
return 'done' | |
} |