将二进制数据传递给python记录器
我想记录原始字节。但是,如果我将FileHandler中的文件模式从“w”更改为“wb”,记录器将失败并出错,无论我传递给它的数据是字符串还是字节将二进制数据传递给python记录器,python,logging,Python,Logging,我想记录原始字节。但是,如果我将FileHandler中的文件模式从“w”更改为“wb”,记录器将失败并出错,无论我传递给它的数据是字符串还是字节 logging.getLogger("clientIn").error(b"bacd") Traceback (most recent call last): File "/usr/lib/python3.4/logging/__init__.py", line 980, in emit stream.write(msg) TypeEr
logging.getLogger("clientIn").error(b"bacd")
Traceback (most recent call last):
File "/usr/lib/python3.4/logging/__init__.py", line 980, in emit
stream.write(msg)
TypeError: 'str' does not support the buffer interface
Call stack:
File "<string>", line 1, in <module>
File "/usr/lib/python3.4/multiprocessing/spawn.py", line 106, in spawn_main
exitcode = _main(fd)
File "/usr/lib/python3.4/multiprocessing/spawn.py", line 119, in _main
return self._bootstrap()
File "/usr/lib/python3.4/multiprocessing/process.py", line 254, in _bootstrap
self.run()
File "/usr/lib/python3.4/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/home/serj/work/proxy_mult/proxy/connection_worker_process.py", line 70, in __call__
self._do_work(ipc_socket)
File "/home/serj/work/proxy_mult/proxy/connection_worker_process.py", line 76, in _do_work
logging.getLogger("clientIn").error("bacd")
Message: 'bacd'
logging.getLogger(“clientIn”).error(b“bacd”)
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.4/logging/_init_uuu.py”,第980行,在emit中
stream.write(msg)
TypeError:“str”不支持缓冲区接口
调用堆栈:
文件“”,第1行,在
文件“/usr/lib/python3.4/multiprocessing/spawn.py”,第106行,在spawn_main中
出口代码=_主(fd)
文件“/usr/lib/python3.4/multiprocessing/spawn.py”,第119行,在
返回自我。_bootstrap()
文件“/usr/lib/python3.4/multiprocessing/process.py”,第254行,在_bootstrap中
self.run()
文件“/usr/lib/python3.4/multiprocessing/process.py”,第93行,正在运行
自我目标(*自我参数,**自我参数)
文件“/home/serj/work/proxy\u mult/proxy/connection\u worker\u process.py”,第70行,在调用中__
自身工作(ipc插座)
文件“/home/serj/work/proxy\u mult/proxy/connection\u worker\u process.py”,第76行,in\u do\u work
logging.getLogger(“clientIn”).error(“bacd”)
信息:“bacd”
我需要使日志模块适应二进制数据的方法 你最终找到解决这个问题的好办法了吗?一个解决办法是用拉丁语-1解码二进制数据,并相应地用拉丁语-1编码打开日志文件,但这不是一个非常优雅的解决方案。不,我没有使用纯
写。在您的解决方案中,您的意思是您将在文本编辑器文本模式中看到与在二进制模式下看到(未解码)输出相同的记录数据吗?如果您向记录器发送字节
对象,我想您将看到数据包装在b'…'
中,并且所有非ASCII字符都用反斜杠转义。使用Latin-1技巧,数据将被逐字写入输出,也就是说,如果您使用编辑器(使用Latin-1编码)打开它,您将看到乱七八糟的内容,包括重音字母,可能还有控制代码框。对不起,但是记录原始字节没有“意义”。你必须回答你的数据被编码成什么的问题。如果您想将原始字节消息写入文件,那么您只是在解决问题(文件编码为什么?)。最接近您的是记录str(您的\u字节)
或列表(您的\u字节)