回答編集履歴

3

追記

2018/03/04 10:11

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -13,3 +13,13 @@
13
13
  自動変換が行われないように、[FileHandler](https://docs.python.jp/3/library/logging.handlers.html#filehandler)をバイナリモード(コンストラクタの引数:modeを設定)で書き込めば良いように思いますが。
14
14
 
15
15
  FileHandlerの親クラスでログ・ファイルに書き込む時に内部で[msg = self.format(record)](https://github.com/python/cpython/blob/3.6/Lib/logging/__init__.py#L992)と`str`に型変換を行っているため`バイナリデータ`を書き込めません。
16
+
17
+
18
+
19
+ ---
20
+
21
+ 後から見た人用纏め。
22
+
23
+ で、ログファイルをLFで出力するには結局どうしたらいいのか?
24
+
25
+ `FileHandler`の代わりにKSwordOfHasteさんのコメントにある、KSwordOfHasteさんが作成した`NLFileHandler`を使えば可能です。

2

補足

2018/03/04 10:11

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -2,8 +2,14 @@
2
2
 
3
3
 
4
4
 
5
- 理由:[streamhandler](https://docs.python.jp/3/library/logging.handlers.html#streamhandler)に`terminator`属性の値を変更すると終端文字列を変更できますが、windows環境において、テキストモードでファイルを書き込む限りでは[\n (LF)は\r\n (CR)(LF)に自動変換される](https://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89)ため`FileHandler`を使用する限りでは無理かと。
5
+ 理由:FileHandlerの親クラスである[StreamHandlerに終端記号を表す`terminator`属性があります。](https://docs.python.jp/3/library/logging.handlers.html#streamhandler)
6
+
7
+ `terminator`属性の値を変更すると終端記号を変更できますが、
8
+
9
+ windows環境においてはログファイルを`テキストモード`で書き込む時に[\n (LF)は\r\n (CR)(LF)に自動変換されます](https://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89)
6
10
 
7
11
 
8
12
 
9
- そして、[FileHandler](https://docs.python.jp/3/library/logging.handlers.html#filehandler)コンストラクタの引数:modeはbinaryモードでログ・ファイル開けますが、FileHandlerの親クラスログ・ファイルに書き込む時内部で[msg = self.format(record)](https://github.com/python/cpython/blob/3.6/Lib/logging/__init__.py#L992)と`str`に変換してるため`binary`データとして書き込めせん
13
+ 自動変換が行われないように、[FileHandler](https://docs.python.jp/3/library/logging.handlers.html#filehandler)をバイナリモード(コンストラクタの引数:modeを設定)で書き込めば良いよういますが
14
+
15
+ FileHandlerの親クラスでログ・ファイルに書き込む時に内部で[msg = self.format(record)](https://github.com/python/cpython/blob/3.6/Lib/logging/__init__.py#L992)と`str`に型変換を行っているため`バイナリデータ`を書き込めません。

1

追記

2018/03/04 02:07

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -6,4 +6,4 @@
6
6
 
7
7
 
8
8
 
9
- そして、[FileHandler](https://docs.python.jp/3/library/logging.handlers.html#filehandler)のmodeはbinaryモードで開けますが、FileHandlerの親クラスでログ・ファイルに書き込む時に内部で[msg = self.format(record)](https://github.com/python/cpython/blob/3.6/Lib/logging/__init__.py#L992)と`str`に変換しているため`binary`データとして書き込めません。
9
+ そして、[FileHandler](https://docs.python.jp/3/library/logging.handlers.html#filehandler)のコンストラクタの引数:modeはbinaryモードでログ・ファイルを開けますが、FileHandlerの親クラスでログ・ファイルに書き込む時に内部で[msg = self.format(record)](https://github.com/python/cpython/blob/3.6/Lib/logging/__init__.py#L992)と`str`に変換しているため`binary`データとして書き込めません。