Skip to content

Instantly share code, notes, and snippets.

@tailtq
Last active April 27, 2022 15:27
Show Gist options
  • Save tailtq/bdbb6558286bfae129a6f35ac49df5b0 to your computer and use it in GitHub Desktop.
Save tailtq/bdbb6558286bfae129a6f35ac49df5b0 to your computer and use it in GitHub Desktop.
Python logging using roll over
import logging
import time
import glob
from threading import Thread
from logging.handlers import TimedRotatingFileHandler
def do_a_heavy_operationnnn():
print("do_a_heavy_operationnnn")
# upload to S3 or whatever
# recent_file = sorted(glob.glob("logs/heavy-log-file*"), reverse=True)
time.sleep(10)
print("finish heavy_operationnnn")
# reference: https://stackoverflow.com/a/53353283/7985083
class CustomTimedRotatingFileHandler(TimedRotatingFileHandler):
def computeRollover(self, currentTime: int) -> int:
if self.when[0] == "W" or self.when == "MIDNIGHT":
return super().computeRollover(currentTime)
# round the current time -> add 1 unit
return ((currentTime // self.interval) + 1) * self.interval
def doRollover(self):
super().doRollover()
thread = Thread(target=do_a_heavy_operationnnn)
thread.start()
# logger.setLevel()
formatter = logging.Formatter(
"%(asctime)s [%(levelname)s] %(message)s", datefmt="%Y-%m-%d %H:%M:%S.%s"
)
handler = CustomTimedRotatingFileHandler(
"logs/heavy-log-file.log",
when="m", # can change to midnight
interval=1,
utc=True,
delay=True,
)
handler.setFormatter(formatter)
logger = logging.getLogger()
logger.setLevel(logging.NOTSET)
logger.addHandler(handler)
while True:
logger.info("Log message")
time.sleep(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment