たのもう
Python の Logging モジュールで CloudWatch Logs にログを転送出来るやつ(ハンドラ)があればいいのになーと思っていたら既に在ったので嬉しかったです。
一本
watchtower のインストール
pip install watchtower
サンプル
import watchtower, logging import boto3 session = boto3.Session(profile_name='your-profile') logging.basicConfig(level=logging.WARN) logger = logging.getLogger(__name__) logger.addHandler(watchtower.CloudWatchLogHandler( boto3_session=session, log_group='your-log-group', stream_name='your-log-stream') ) logger.info(dict(level="info", details={"foo":"info"})) logger.warn(dict(level="warn", details={"foo":"warn"})) logger.error(dict(level="error", details={"foo":"error"}))
サンプルを実行
$ python --version Python 3.6.0 $ python log_test.py WARNING:__main__:{'level': 'warn', 'details': {'foo': 'warn'}} ERROR:__main__:{'level': 'error', 'details': {'foo': 'error'}}
CloudWatch Logs を確認してみます。
$ aws --profile your-profile --region ap-northeast-1 logs get-log-events \ --log-group-name your-log-group \ --log-stream-name your-log-stream \ | jq '.events|sort_by(.timestamp)|.[-2,0]' { "ingestionTime": 1490399839605, "timestamp": 1490399841112, "message": "{'level': 'warn', 'details': {'foo': 'warn'}}" } { "ingestionTime": 1490399839605, "timestamp": 1490399841619, "message": "{'level': 'error', 'details': {'foo': 'error'}}" }