Skip to content

Instantly share code, notes, and snippets.

@mobsense
Last active August 19, 2021 21:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mobsense/479e4053e39c7f81d1d1a075e33de81e to your computer and use it in GitHub Desktop.
Save mobsense/479e4053e39c7f81d1d1a075e33de81e to your computer and use it in GitHub Desktop.
Dynamic Log Control
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'
}
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'
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment