nysimplelog
nysimplelog は、logging のためのシンプルな Python ライブラリです。標準の Python logging.basicConfig に依存せず、コンソールとファイルの両方にログを出力します。異なるモジュール間でもログ設定を構成できます。
1. 必要条件
- Python 3.10 以上(完全な型ヒントサポートのため)
- tzdata(Windows の場合、タイムゾーンのサポートに必要)
2. インストール
pip でインストールします:
pip install nysimplelog
3. 使用方法
3.1 パッケージのインポート
メインプログラム:
from logging import getLogger, WARNING, INFO, DEBUG
from nysimplelog import initialize_simple_logger
モジュール:
from logging import getLogger
3.2 ロガーの作成
指定した名前でロガーを返します。ロガー名に __name__
を使うことでモジュール名を使用できます。
logger = getLogger(__name__)
or
logger = getLogger("example")
3.3 シンプルロガーの初期化
カスタム設定でロガーを初期化します。この関数は設定済みのロガーを返します。
logger = initialize_simple_logger(
name="example",
log_dir="logs",
fmt="%(asctime)s %(levelname)s %(name)s - %(message)s", # カスタムフォーマット
datefmt="%Y-%m-%dT%H:%M:%S", # カスタム日付フォーマット
tz="Asia/Tokyo",
level="DEBUG",
file_handler_level=WARNING, # ファイルは警告以上を記録
maxBytes=1024 * 1024, # 1MB(デフォルトは10MB)
backupCount=5, # 5つのログファイル(デフォルトは2)
)
オプション
パラメータ | 説明 |
---|---|
name | ロガーの名前。 |
log_dir | ログファイルのディレクトリ。デフォルト: "logs" 。 |
filename | ログファイル名。デフォルト: "{log_dir}/{name}.log" 。 |
fmt | ログメッセージのフォーマット。デフォルト: "%(asctime)s %(levelname)s %(name)s - %(message)s" 。 |
datefmt | 日付フォーマット。デフォルト: ISO-8601(例: "2023-05-27T07:20:32.798+09:00" )。 |
tz | ログタイムスタンプのタイムゾーン(例: "UTC", "Asia/Tokyo")。デフォルト: None(ローカル時間を使用)。 |
formatter | カスタムフォーマッター。デフォルト: None(ISO8601_Formatter を使用)。 |
level | ロガーレベル(整数または文字列)。デフォルト: logging.WARNING 。 |
stream_handler_level | ストリームハンドラーのレベル。デフォルト: None の場合、level パラメータが使用されます。 |
file_handler_level | ファイルハンドラーのレベル。デフォルト: None の場合、level パラメータが使用されます。 |
maxBytes | ローテーション前の最大ファイルサイズ。デフォルト: 10MB 。 |
backupCount | バックアップログファイルの数。デフォルト: 2 。 |
Note: Windows で、
tz
パラメータを使用する場合、特定のタイムゾーンを利用できるようにpip install tzdata
を実行してください。
3.4 ログメッセージの記録
詳細は Python のログドキュメント を参照してください。標準のログメソッドを使用します:
logger.debug("Debug message")
logger.info("Info message")
logger.warning("Warning message")
logger.error("Error message")
4. 使用例
4.1 ディレクトリ構造
examples/example_usage.py
examples/mypackage/__init__.py
完全なサンプルプロジェクトは、GitHub リポジトリの examples フォルダ を参照してください。
4.2 モジュールの例
# examples/mypackage/__init__.py
from logging import getLogger
logger = getLogger(__name__)
def hello():
logger.debug("Hello, world!")
4.3 メインプログラム
# examples/example_usage.py
from logging import getLogger, WARNING, INFO, DEBUG
from nysimplelog import initialize_simple_logger
import mypackage
# ストリームとファイルで異なるレベルのメインロガー
logger = initialize_simple_logger(
name="main",
level=DEBUG,
stream_handler_level=INFO, # コンソールは情報以上を記録
file_handler_level=WARNING # ファイルは警告以上を記録
)
# モジュール固有のロガー
initialize_simple_logger(name=mypackage.__name__, level=DEBUG)
logger.debug("This is a debug message") # 表示されない
logger.info("This is an info message") # レベルが許可する場合、ファイルにのみ
logger.warning("This is a warning") # コンソールとファイル
mypackage.hello() # mypackage ロガーに依存
4.4 出力
Console:
2025-03-02T18:01:28.413+09:00 INFO main - This is an info message
2025-03-02T18:01:28.414+09:00 WARNING main - This is a warning
2025-03-02T18:01:28.414+09:00 DEBUG mypackage - Hello, world!
File logs/main.log
:
2025-03-02T18:01:28.414+09:00 WARNING main - This is a warning
ファイルは logs/
にローテーション付きで保存されます(例: main.log
, main.log.1
など)。
5. 機能
- 異なるモジュール向けにログを設定可能。
- 標準出力とファイル出力をサポート。
- ログファイルのローテーションをサポート。
- デフォルトの日付フォーマットとして ISO-8601 を使用。