環境
Windows10 Home
Python3.6.4
PyCharm community 2017.3
Build #PC-173.3942.36 build on December 14.2017
Python
1file_h = logging.FileHandler('test.log') 2logger.addHandler(file_h)
上記のコードで作成される「test.log」の改行コードが[CR+LF]になっています。
これを常にLFのみにしたい。
確認したこと。
[File]>[Setting]>[Code Style]にて
[Line separator]は[Unix and OS X(\n)]に設定済み。
ログファイルはソースコードではないので、改行コードは気にしなくてもよいのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
結論:FileHandlerを使用する限りでは、質問文の要件は満たせないです。
理由:FileHandlerの親クラスであるStreamHandlerに終端記号を表すterminator
属性があります。
terminator
属性の値を変更すると終端記号を変更できますが、
windows環境においてはログファイルをテキストモード
で書き込む時に\n (LF)は\r\n (CR)(LF)に自動変換されます
自動変換が行われないように、FileHandlerをバイナリモード(コンストラクタの引数:modeを設定)で書き込めば良いように思いますが。
FileHandlerの親クラスでログ・ファイルに書き込む時に内部でmsg = self.format(record)とstr
に型変換を行っているためバイナリデータ
を書き込めません。
後から見た人用纏め。
で、ログファイルをLFで出力するには結局どうしたらいいのか?
FileHandler
の代わりにKSwordOfHasteさんのコメントにある、KSwordOfHasteさんが作成したNLFileHandler
を使えば可能です。
投稿2018/03/04 01:25
編集2018/03/04 10:11総合スコア5846
0
後からhandler.stream
をすげ替えてもOK。
python
1from io import TextIOWrapper 2from logging import FileHandler 3from logging import getLogger 4 5handler = FileHandler("test.log") 6handler.stream = TextIOWrapper(handler.stream.detach(), 7 encoding=handler.stream.encoding, 8 newline="\n") 9 10logger = getLogger("test") 11logger.addHandler(handler) 12logger.error("test")
投稿2018/03/04 11:58
総合スコア6142
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
ログファイルはソースコードではないので、改行コードは気にしなくてもよいのでしょうか?
気にしなくてよいというより「実行したOSで一番自然な改行コードにする」のをよしとしてPythonのライブラリーは動いているという認識ができているかどうかです。
Windowsでメモ帳やその他のCR+LFを改行としてみなすエディターで普通に閲覧できることを期待するならCR+LFとして動作させるのが妥当でしょう。
一方ログファイルを「そのままバイナリー転送してLinuxへ送りたい」なんてことを考えるならCRは付けたくないということがあるかも知れません。
どんな場合でも闇雲にCRを取るのが妥当とか取らないことが妥当とは言い切れません。ログファイルをどういうふうに扱いたいかによると思います。
個人的な意見としては「Windowsで実行するならCR+LFを付けといた方がなにかと便利」です。それを他の環境へ転送するなら「テキストを料理するなんらかのツールで」CRを削除すればいいと思います。
追記:
PyCharm (Windows 10, Python3.6)で動きをみたところumyuさんがコメントしておられるように「ライブラリーのかなり深いところで改行コードの置き換えが行われているらしい」ことが観察できました。
適当なエンコーダーで文字列=>バイト列へ変換することも含めてテキストストリームを自前実装することもできるとは思いますが、上記コメントに書いたようにそこまで手間をかけてCRを取る必要もない気がしました。
投稿2018/03/04 03:46
編集2018/03/04 04:04総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/04 05:28
2018/03/04 09:20
2018/03/04 09:38 編集
2018/03/04 09:58 編集
2018/03/04 10:21
2018/03/04 10:31 編集
2018/03/04 12:03
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/04 05:29
2018/03/04 08:25
2018/03/04 11:11