我在Python中通过这个链接中的conf文件设置使用日志库 https://realpython.com/python-logging/ 和我写的这个代码。
log.conf.conf :
[loggers]
keys=root, sampleLogger
[handlers]
keys= consoleHandler, fileHandler
[formatters]
keys=fileFormatter, consoleFormatter
[logger_root]
level=DEBUG
handlers=fileHandler,consoleHandler
[logger_sampleLogger]
level=DEBUG
handlers=consoleHandler
qualname=sampleLogger
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=consoleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=handlers.TimedRotatingFileHandler
interval=midnight
backupCount=5
formatter=fileFormatter
level=DEBUG
args=('../logs/log.log',)
[formatter_fileFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
[formatter_consoleFormatter]
format=%(message)s
main.py:
logging.config.fileConfig(fname='../configs/log_conf.conf',
disable_existing_loggers=False)
logger = logging.getLogger('main')
logger.info('Hello')
logger.info('سلام')
含有英文字符的日志字符串,如 "Hello",工作起来没有任何问题。但是,包含波斯语/阿拉伯语字符的字符串 "سلام "会引发异常。
--- Logging error ---
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\logging\__init__.py", line 1028, in emit
stream.write(msg + self.terminator)
File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 40-43: character maps to <undefined>
Call stack:
File "D:/Alireza/Code/addresstomaplocation/main/main.py", line 11, in <module>
logger.info('سلام')
Message: 'سلام'
Arguments: ()
所以我试着用 "utf-8 "解码,这样做是可行的,但显然日志文件对人类来说是不可读的。
logger.info('سلام'.encode('utf-8'))
outputs in log file:
2020-09-16 18:55:00,949 - main - INFO - b'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85'
My question is "有什么办法可以在日志文件中写上波斯文字符,而不进行编码,以便于人类阅读?"