python - 通过 apache 记录空字节

标签 python apache logging

通过 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/

相关文章:

python - 尝试在子进程中调用 bash 脚本时,我被拒绝了权限

linux - 文件上传尝试中 error_log 上的 MaxRequestLen 错误

c# - 程序类中的 Serilog

c++ - 带有日志系统多类示例的 Appender

python - 试图跟踪 Django 中的循环导入错误

python - 将数据分入范围

windows - 修改 httpd.conf 以在 EasyPHP 中通过互联网提供服务

azure - 用于多个azure功能的集中日志系统?

python - 替换 Python 中以反斜杠开头的单词

wordpress - 如何通过 localhost 在网络上本地启用 WordPress 网站