如何使用python中的日志记录模块制作两个日志文件?

时间:2018-12-10 13:24:10

标签: python-3.x logging

你好!

 #this is values from xml file.
    clientID = logObject['meta']['clientID']
    authToken = logObject['meta']['authToken']
    logType = logObject['logType']

    FORMAT = '%(asctime)-15s %(logType)s %(process)d %(user)-8s %(message)s'
    d = {'logType': logType ,'user': getpass.getuser()}
    #line creating two log files(access.log and error.log) 
    logging.basicConfig(filename = 'access.log', filemode = 'w', format=FORMAT)
    logging.basicConfig(filename = 'error.log', filemode = 'w', format=FORMAT)

    if(clientID == ""):
        # logger = setup_logger('first_logger', 'access.log',logType)
        logger.warning('Please Enter clientID', extra=d)

这是我的示例代码。  我需要创建两个我已经提到的文件。但是问题在于它每次都只会创建一个文件,而消息只会发送到该文件。     因此,我希望如果我提到logger.error(“ msg”)或logger.warning(“ msg”),那么它应该转到该日志文件。

1 个答案:

答案 0 :(得分:0)

仅使用logging时,实际上使用的是在import logging期间创建的单个root记录器。您可以将其与多个处理程序一起使用。例如:

# 1. logging to file
filename = (
    'log_file{}.log'
    .format(
        dt.datetime.today().strftime("_date_%Y-%m-%d_time_%H-%M-%S")))
# path to log folder.
path = os.path.join(os.getcwd(), 'logs')
# create log folder if it does not exist.
if not os.path.isdir(path):
    os.makedirs(path, exist_ok=True)
to_file = logging.FileHandler(os.path.join(path, filename))
to_file.addFilter(lambda x: x.levelno in [20, 40])

# 2. logging to console
to_console = logging.StreamHandler()
to_console.addFilter(lambda x: x.levelno in [20, 21, 40])

# 3. root logger configuration
logging.basicConfig(
    level=10,
    datefmt='%Y-%m-%d %H:%M:%S',
    format='[%(asctime)s]:%(threadName)s:%(levelname)s:%(message)s',
    handlers=[to_console, to_file])

如果您要登录2个文件,则只需创建2个处理程序logging.FileHandler(...),对其进行注册,然后照常使用新配置的root记录器:

logging.info('Some info')

另一个选择是创建2个记录器。通常,如果您要分离多个日志消息源,则需要这样做。