python

しょっちゅう忘れることを書いておく。

66

163 views

ラップアラウンドするログクラス

# coding: UTF-8
from datetime import datetime
import os
import glob


class Log(object):

    def __init__(self, output_dir="./", log_name="trace.log", log_size=10, lap_num=10, stdout=True):
        self.output_dir = output_dir
        self.log_name = log_name
        self.log_size = log_size * 1024 * 1024
        self.lap_num = lap_num
        self.stdout = stdout

    def output(self, msg, level="success"):
        if not os.path.exists(self.output_dir):
            os.makedirs(self.output_dir)

        log_datetime = datetime.today().strftime("%Y/%m/%d %H:%M:%S")
        text = f"{log_datetime} {level} {msg}"
        log_file_path = os.path.join(self.output_dir, self.log_name)

        if os.path.exists(log_file_path):
            # ラップアラウンド
            file_size = os.path.getsize(log_file_path)
            now = datetime.now()
            new = "{0:%Y%m%d%H%M%S}_trace.log".format(now)
            if file_size >= self.log_size:
                old_path = log_file_path
                new_path = os.path.join(os.getcwd(), new)
                os.rename(old_path, new_path)

                # 一番古いログファイルを削除する
                file_list = sorted(glob.glob('*_trace.log'))
                backup_file_num = len(file_list)
                if backup_file_num >= self.lap_num:
                    os.remove(file_list[0])

        with open(log_file_path, "a", encoding="utf-8") as f:
            if self.stdout:
                print(text)
            f.write(text + "\n")


if __name__ == '__main__':
    log = Log()
    log.output("こんにちは")

Page 58 of 69.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626