Python のloggingについて質問です。
python3.6系でflaskのコード内にログようにloggingモジュールを使って
出力をおこなっているのですがどうもバイト列しか書き込みができないようです。
python
1# ログの出力名を設定 2logger = logging.getLogger('LoggingTest') 3# ログレベルの設定 4logger.setLevel(0) 5# ログのファイル出力先を設定 6fh = logging.FileHandler("/var/www/test.docgack.com/public/log.dat") 7logger.addHandler(fh) 8# ログのコンソール出力の設定 9sh = logging.StreamHandler() 10logger.addHandler(sh) 11# ログの出力形式の設定 12formatter = logging.Formatter('%(asctime)s:%(lineno)d:%(levelname)s:%(message)s') 13fh.setFormatter(formatter) 14sh.setFormatter(formatter) 15logger.info("---------{}".format("文字列"))
上記の最後の行のようにマルチバイト文字列を書き込みたいのですが
エンコードして書き込むほかないのでしょうか?
あるいはstrオブジェクトでも書き込める設定があればご教授お願いいたします。
「書き込みができないようです」の具体的な内容を書くべきでした。提示されたソースで「エラーなしに実行できるが、ログに書かれていない」ということに対する質問ですか?
そうです!例えば logger.info("start");logger.info("マルチバイト");logger.info("end");と記述すると,ログファイルには確かに (1)start と(2)endと書き込まれます。ただし,<マルチバイト> という文字列はログに吐き出されてないようです。ただencode("***");してあげるとログに出力はされるようなのです。
ちょっと悩ましいです。質問のソースで logger.info("---------{}".format("文字列")) が書き込まれないのは、"strとbytesで挙動が違う"からではなくて"ログレベルがwarning以上になっている"せいなのです。実際に起きているのと同じ現象なのか確信が持てないですね……
ご回答ありがとうございます!一度全ログレベルで吐き出すよう検証してみます。
あなたの回答
tips
プレビュー