Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将二进制数据传递给python记录器_Python_Logging - Fatal编程技术网

将二进制数据传递给python记录器

将二进制数据传递给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

我想记录原始字节。但是,如果我将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)
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字节)