通过 Apache 将二进制数据记录到 stdout 时出现问题。
配置日志记录后,我尝试记录字符串'\x31\x00'
:
logging.getLogger().info('\x31\x00')
如果我使用 python 控制台,一切都会顺利 - 我看到了预期的结果:
2011-05-01 22:21:27,430 INFO [test_logging:9][test_logging] 1
但是如果我通过 Apache 和 mod_wsgi 使用日志记录,我会得到回溯:
Traceback (most recent call last):
File "/usr/local/lib/python2.6/logging/__init__.py", line 789, in emit
stream.write(fs % msg) TypeError: write() argument 1 must be string without null bytes, not str
问题出在哪里?我应该从哪里挖掘?
我的日志配置:
[loggers]
keys=root
[formatters]
keys=stdoutFormatter
[handlers]
keys=stdoutHandler
[logger_root]
level=NOTSET
handlers=stdoutHandler
[handler_stdoutHandler]
class=StreamHandler
formatter=stdoutFormatter
args=(sys.stdout,)
[formatter_stdoutFormatter]
format=%(asctime)s %(levelname)s [%(module)s:%(lineno)d][%(funcName)s] %(message)s
Apache 版本 2.2.16
Python 版本 2.6.4
Mod_wsgi 2.8
最佳答案
你可以使用
logging.getLogger().info('%r', binary_bytes)
它应该做正确的事情。
Apache/mod_wsgi 没有任何问题 - 只是控制台输出流不应该用于二进制数据。
关于python - 通过 apache 记录空字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5885948/