我使用日志记录实用程序生成和更新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')
再次感谢。
答案 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)