如何将日志消息同时写入日志文件和控制台?

发布于 2021-01-29 18:26:59

此代码是否同时写入日志文件和控制台?

logFile = open("logfile.log",a)
print >>logFile,message
logFile.close()
关注者
0
被浏览
166
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    不,它不会同时写入两者。print()只会写入控制台。关于原始代码的简短说明。我想您在message某处定义,但是代码仍然不正确。您需要aopen语句中使用引号,例如:

    open("logfile.log", "a")
    

    因为我认为您是要附加到文件中。否则,您的代码将抛出一个NameError因为a未定义的变量。

    但是,正如其他人所说,您应该强烈考虑使用日志记录模块。这是一个如何同时写入控制台和日志文件的简单示例。该代码部分源自此处此处

    import inspect
    import logging
    
    def function_logger(file_level, console_level = None):
        function_name = inspect.stack()[1][3]
        logger = logging.getLogger(function_name)
        logger.setLevel(logging.DEBUG) #By default, logs all messages
    
        if console_level != None:
            ch = logging.StreamHandler() #StreamHandler logs to console
            ch.setLevel(console_level)
            ch_format = logging.Formatter('%(asctime)s - %(message)s')
            ch.setFormatter(ch_format)
            logger.addHandler(ch)
    
        fh = logging.FileHandler("{0}.log".format(function_name))
        fh.setLevel(file_level)
        fh_format = logging.Formatter('%(asctime)s - %(lineno)d - %(levelname)-8s - %(message)s')
        fh.setFormatter(fh_format)
        logger.addHandler(fh)
    
        return logger
    
    def f1():
        f1_logger = function_logger(logging.DEBUG, logging.ERROR)
        f1_logger.debug('debug message')
        f1_logger.info('info message')
        f1_logger.warn('warn message')
        f1_logger.error('error message')
        f1_logger.critical('critical message')
    
    def f2():
        f2_logger = function_logger(logging.WARNING)
        f2_logger.debug('debug message')
        f2_logger.info('info message')
        f2_logger.warn('warn message')
        f2_logger.error('error message')
        f2_logger.critical('critical message')
    
    def main():
        f1()
        f2()
        logging.shutdown()
    
    main()
    

    由于记录器对象可以具有多个处理程序,因此我们可以创建写入不同位置的多个处理程序。在我的代码中,该function_logger函数创建一个特定于其调用函数的logger对象。

    该功能f1()DEBUG级别消息及更高级别的消息记录到一个文件中f1.log,同时将ERROR级别消息及更高级别的消息写入控制台,每种消息的格式不同。

    f2()但是,该功能不记录任何内容到控制台,而仅将WARNING级别消息记录到其日志文件中f2.log。运行此脚本一次,将在控制台上产生以下输出:

    2012-07-20 10:46:38,950 - f1  - error message
    2012-07-20 10:46:38,953 - f1  - critical message
    

    该输出分别在f1.log和中f2.log

    f1.log

    2012-07-20 10:46:38,950 - 26 - DEBUG    - debug message
    2012-07-20 10:46:38,950 - 27 - INFO     - info message
    2012-07-20 10:46:38,950 - 28 - WARNING  - warn message
    2012-07-20 10:46:38,950 - 29 - ERROR    - error message
    2012-07-20 10:46:38,953 - 30 - CRITICAL - critical message
    

    f2.log

    2012-07-20 10:46:38,960 - 36 - WARNING  - warn message
    2012-07-20 10:46:38,960 - 37 - ERROR    - error message
    2012-07-20 10:46:38,960 - 38 - CRITICAL - critical message
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看