我在单元测试模块框架中使用以下日志记录代码
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(output_dir, "w")
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
问题是,当我在代码中使用 print 语句时,这些语句不会在任何地方打印。不在控制台上,也不在输出文件中(尽管我理解为什么这些没有打印在文件中)。
谁能告诉我在控制台打印print
语句的原因和解决方法
我正在使用 python 2.7
最佳答案
您没有在任何地方设置 StreamHandler,请修改下面的示例。
import logging
output_dir = "/tmp/somefile"
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(output_dir, "w")
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
# HERE
ch = logging.StreamHandler()
logger.addHandler(ch)
logger.info("test")
logger.info("test")
logger.info("test")
logger.info("test")
这为我提供了控制台和文件中的输出。
编辑:
不是最好的主意,同意,但直接取自 documentation
import logging
import unittest
logger = None
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
logger.info(self)
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
logger.info(self)
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
logger.info(self)
def setup_log():
global logger
output_dir = "/tmp/somefile"
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(output_dir, "w")
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
ch = logging.StreamHandler()
logger.addHandler(ch)
logger.info("Logger ready")
if __name__ == '__main__':
setup_log()
unittest.main()
它有效,所以您的代码中可能还有其他问题,如果您更新了更精细的版本,也许我们可以提供帮助。
关于python - 打印语句不会出现在带有日志记录模块的控制台上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47731201/