##
2 基本的な使い方

`logging` パッケージには高い柔軟性があり、その設定にたじろぐ こともあるでしょう。そこでこの節では、 `logging` パッケージを 簡単に使う方法もあることを示します。

以下の最も単純な例では、コンソールにログを表示します:

    import logging

    logging.debug('A debug message')
    logging.info('Some information')
    logging.warning('A shot across the bows')

上のスクリプトを実行すると、以下のようなメッセージを目にするでしょう:

    WARNING:root:A shot across the bows

ここではロガーを特定しなかったので、システムはルートロガーを使っています。 デバッグメッセージや情報メッセージは表示されませんが、これはデフォルトの ルートロガーが WARNING 以上の重要度を持つメッセージしか処理しないように 設定されているからです。 メッセージの書式もデフォルトの設定に従っています。出力先は `sys.stderr` で、これもデフォルトの設定です。 重要度レベルやメッセージの形式、ログの出力先は、以下の例のように簡単に 変更できます:

    import logging

    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(levelname)s %(message)s',
                        filename='/tmp/myapp.log',
                        filemode='w')
    logging.debug('A debug message')
    logging.info('Some information')
    logging.warning('A shot across the bows')

ここでは、`basicConfig()` メソッドを使って、以下のような出力例 になる (そして`/tmp/myapp.log` に書き込まれる) ように、 デフォルト設定を変更しています:

    2004-07-02 13:00:08,743 DEBUG A debug message
    2004-07-02 13:00:08,743 INFO Some information
    2004-07-02 13:00:08,743 WARNING A shot across the bows

今度は、重要度が DEBUG か、それ以上のメッセージが処理されました。 メッセージの形式も変更され、出力はコンソールではなく特定のファイル に書き出されました。

出力の書式化には、通常の Python 文字列に対する初期化を使います - 2.3.6 節を参照してください。書式化文字列は、 以下の指定子 (specifier) を常にとります。指定子の完全なリストに ついては `Formatter` のドキュメントを参照してください。

書式 | 説明
--- | ---
`%(name)s` | ロガーの名前 (ログチャネル) の名前です。
`%(levelname)s` | メッセージのログレベル (`'DEBUG'`, `'INFO'`, `'WARNING'`, `'ERROR'`, `'CRITICAL'`) です。
`%(asctime)s` | `LogRecord` が生成された際の時刻を、 人間が読み取れる形式にしたものです。デフォルトでは、 ``2003-07-08 16:49:45,896'' のような形式 (コンマの後ろはミリ秒) です。
`%(message)s` | ログメッセージです。

以下のように、追加のキーワードパラメタ datefmt を渡すと日付や時刻の 書式を変更できます:

    import logging

    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(levelname)-8s %(message)s',
                        datefmt='%a, %d %b %Y %H:%M:%S',
                        filename='/temp/myapp.log',
                        filemode='w')
    logging.debug('A debug message')
    logging.info('Some information')
    logging.warning('A shot across the bows')

出力は以下のようになります:

    Fri, 02 Jul 2004 13:06:18 DEBUG    A debug message
    Fri, 02 Jul 2004 13:06:18 INFO     Some information
    Fri, 02 Jul 2004 13:06:18 WARNING  A shot across the bows

日付を書式化する文字列は、`strftime()` の要求に従います - `time` モジュールを参照してください。

コンソールやファイルではなく、別個に作成しておいたファイル類似オブジェクト にログを出力したい場合には、`basicConfig()` に stream キーワード引数で渡します。stream とfilename の両方の引数を指定した場合、stream は無視されるので注意してください。

状況に応じて変化する情報ももちろんログ出力できます。以下のように、 単にメッセージを書式化文字列にして、その後ろに可変情報の引数を渡すだけです:

    import logging

    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(levelname)-8s %(message)s',
                        datefmt='%a, %d %b %Y %H:%M:%S',
                        filename='/temp/myapp.log',
                        filemode='w')
    logging.error('Pack my box with %d dozen %s', 5, 'liquor jugs')

出力は以下のようになります:

    Wed, 21 Jul 2004 15:35:16 ERROR    Pack my box with 5 dozen liquor jugs