est*_*est 29 python logging newline
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', datefmt='%H:%M:%S')
logging.info('hello')
logging.warning('\n new hello')
Run Code Online (Sandbox Code Playgroud)
11:15:01 INFO你好
11:16:49警告
新招呼你好
因为日志很拥挤,我想在之前 asctime和之前显式插入换行符levelname.这可能没有修改format吗?
我查看了logging模块并搜索了一下,找不到可行的方法.
Hai*_* Vu 32
我有两个解决方案,第一个很容易,但输出不是很干净.第二种方法将产生您想要的确切输出,但它涉及更多一点.
要生成一个空行,只需使用新行记录一个空字符串:
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', datefmt='%H:%M:%S')
logging.info('hello')
logging.info('\n')
logging.warning('new hello')
Run Code Online (Sandbox Code Playgroud)
输出将有一个空的信息行,这不是很干净:
16:07:26 INFO你好
16:07:26信息16:07:26警告新的你好
在这个方法中,我创建了两个不同的处理程序.在console_handler我使用的大部分时间.当我需要一个新行时,我切换到第二个处理程序,blank_handler.
import logging
import types
def log_newline(self, how_many_lines=1):
# Switch handler, output a blank line
self.removeHandler(self.console_handler)
self.addHandler(self.blank_handler)
for i in range(how_many_lines):
self.info('')
# Switch back
self.removeHandler(self.blank_handler)
self.addHandler(self.console_handler)
def create_logger():
# Create a handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(logging.Formatter(fmt="%(name)s %(levelname)-8s: %(message)s"))
# Create a "blank line" handler
blank_handler = logging.StreamHandler()
blank_handler.setLevel(logging.DEBUG)
blank_handler.setFormatter(logging.Formatter(fmt=''))
# Create a logger, with the previously-defined handler
logger = logging.getLogger('logging_test')
logger.setLevel(logging.DEBUG)
logger.addHandler(console_handler)
# Save some data and add a method to logger object
logger.console_handler = console_handler
logger.blank_handler = blank_handler
logger.newline = types.MethodType(log_newline, logger)
return logger
if __name__ == '__main__':
logger = create_logger()
logger.info('Start reading database')
logger.info('Updating records ...')
logger.newline()
logger.info('Finish updating records')
Run Code Online (Sandbox Code Playgroud)
输出是你想看到的:
logging_test INFO : Start reading database
logging_test INFO : Updating records ...
logging_test INFO : Finish updating records
Run Code Online (Sandbox Code Playgroud)
logging并替换它们来更改代码logger.您必须小心,只更换相关部件,并留下相应的文字logging.DEBUG.小智 8
你能不能在第一次问候后添加换行符?即
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', datefmt='%H:%M:%S')
logging.info('hello\n')
logging.info('new hello')
Run Code Online (Sandbox Code Playgroud)
哪个会输出
2014-08-06 11:37:24,061 INFO : hello
2014-08-06 11:37:24,061 INFO : new hello
Run Code Online (Sandbox Code Playgroud)
使用Formatter在不同时间使用不同格式字符串的自定义。你不能这样做basicConfig()- 你必须使用loggingAPI 的其他部分。
class MyFormatter(logging.Formatter):
def format(self, record):
# set self._fmt to value with or without newline,
# as per your decision criteria
# self._fmt = ...
return super(MyFormatter, self).format(record)
Run Code Online (Sandbox Code Playgroud)
或者,您可以调用该super方法,然后修改字符串以在返回之前插入换行符(例如,如果它依赖于行长)。
小智 5
插入我想出的换行符的最简单方法:
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s\n\r%(message)s', datefmt='%H:%M:%S')
logging.info('hello')
logging.info('new hello')
Run Code Online (Sandbox Code Playgroud)
11:50:32 信息
你好
11:50:32 信息
新你好
| 归档时间: |
|
| 查看次数: |
30060 次 |
| 最近记录: |