我正在尝试使用Python的日志包将UTF-8编码的字符串记录到文件中.作为玩具示例:
import logging
def logging_test():
handler = logging.FileHandler("/home/ted/logfile.txt", "w",
encoding = "UTF-8")
formatter = logging.Formatter("%(message)s")
handler.setFormatter(formatter)
root_logger = logging.getLogger()
root_logger.addHandler(handler)
root_logger.setLevel(logging.INFO)
# This is an o with a hat on it.
byte_string = '\xc3\xb4'
unicode_string = unicode("\xc3\xb4", "utf-8")
print "printed unicode object: %s" % unicode_string
# Explode
root_logger.info(unicode_string)
if __name__ == "__main__":
logging_test()
Run Code Online (Sandbox Code Playgroud)
这会在logging.info()调用中与UnicodeDecodeError一起爆炸.
在较低级别,Python的日志包使用编解码器包打开日志文件,传递"UTF-8"参数作为编码.这一切都很好,但它试图将字节字符串写入文件而不是unicode对象,这会爆炸.从本质上讲,Python正在这样做:
file_handler.write(unicode_string.encode("UTF-8"))
Run Code Online (Sandbox Code Playgroud)
什么时候应该这样做:
file_handler.write(unicode_string)
Run Code Online (Sandbox Code Playgroud)
这是Python中的一个错误,还是我正在服用疯狂的药丸?FWIW,这是一个库存Python 2.6安装.
我已阅读手册并知道如何设置锁,锁柜,数据库页面大小等数量,但我只是喜欢有BDB并发实际经验的人的一些建议.
我的应用程序非常简单,我将进行获取和放置大约1KB的记录.没有游标,没有删除.
有没有相当于jstack的python?我有一个挂起的过程,我真的想看看它是什么,因为我还没有重现开发中的缺陷.