将信息传递给Python中的包含文件

时间:2018-01-24 16:58:39

标签: python logging include

我使用日志记录实用程序生成和更新Python脚本的日志文件。

但是,我发现我需要在每个我希望拥有日志文件的脚本中编辑我的代码。例如,为每个单独的脚本使用不同的目录和文件名等。

然后我创建了一个包含文件,即loginfo.py,并使用日志记录为任何脚本导入此文件。但是,现在我很难确定将特定目录/文件名信息传递给包含文件的方法。

有更好的方法吗?

感谢,

已编辑以显示代码...

import logging
from logging.handlers import RotatingFileHandler
import os

basedir = '/home/user/LOG/'
process = 'server_backup'

LOG_DIR = basedir + process

if not os.path.exists(LOG_DIR):
    os.makedirs(LOG_DIR)

LOG_FILE = LOG_DIR +'/'+ process + '.log'
MAX_BYTES = 2000000      # MAX_BYTES is size of log file before being rotated
BACKUP_COUNT = 50       # BACKUP_COUNT is number of files logged before being

# provide names for individual log entries
logger_GEN = logging.getLogger('GEN')
# set the level of logging for each specific logger
logger_GEN.setLevel(logging.INFO)
log_handler = RotatingFileHandler(LOG_FILE, maxBytes=MAX_BYTES,     backupCount=BACKUP_COUNT)
log_handler.formatter = logging.Formatter("%(asctime)s - %(name)s: \t%(message)s", datefmt='%Y-%m-%d %H:%M:%S')
# add the handler to the logger
logger_GEN.addHandler(log_handler)

我必须将此代码放在我希望将信息记录到文件的任何脚本的开头。我做的唯一改变是基于'基于'和'流程'。

然后我创建了一个名为' loginfo.py'的文件。当我包含它时,我可以生成并使用主脚本中的日志文件;我无法动态更改基于'或者'服务器'从主要脚本 - 除非我在' loginfo.py'中制作方法。并从主脚本发送这些参数,如:

loginfo.create_log('basedir', 'server')
再次感谢。

2 个答案:

答案 0 :(得分:0)

您是否尝试过设置日志格式?在程序开始时执行一次...

log_format='[%(levelname)s %(filename)s ln=%(lineno)s] %(message)s'
logging.basicConfig(level=level, format=log_format)

此处的文件名将包含在日志文件的每一行中。有关各种选项,请参阅LogRecord属性下的https://docs.python.org/2/library/logging.html

或者,如果您想知道如何登录文件并希望每个脚本都有不同的文件名,请使用__file__获取当前脚本的文件名。

答案 1 :(得分:0)

通过bivouac0提供的线索,我能够将其作为解决方案:

import logging
from logging.handlers import RotatingFileHandler
import os

basedir = '/home/user/LOG/'

def create_logger(process):

    LOG_DIR = basedir + process

    if os.path.exists(LOG_DIR):
        LOG_FILE = LOG_DIR +'/'+ process + '.log'
    else:
        os.makedirs(LOG_DIR)
        LOG_FILE = LOG_DIR +'/'+ process + '.log'

    MAX_BYTES = 2000000    # MAX_BYTES is size of log file before being rotated
    BACKUP_COUNT = 50       # BACKUP_COUNT is number of files logged before being

    # provide names for individual log entries
    logger_GEN = logging.getLogger('GEN')

    # set the level of logging for each specific logger
    logger_GEN.setLevel(logging.INFO)

    log_handler = RotatingFileHandler(LOG_FILE, maxBytes=MAX_BYTES, backupCount=BACKUP_COUNT)
    log_handler.formatter = logging.Formatter("%(asctime)s - %(name)s: \t%(message)s", datefmt='%Y-%m-%d %H:%M:%S')

    # add the handler to the logger
    logger_GEN.addHandler(log_handler)

    return logger_GEN

我将上面的代码保存在名为log_control.py的文件中,并且从我想要提供日志记录的任何脚本中添加以下行:

import log_control
process = 'server'
my_logger = log_control.create_logger(process)

使用记录器进程添加日志条目:

my_logger.info('%s \thandled' % process)