你好!
#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”),那么它应该转到该日志文件。
答案 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个记录器。通常,如果您要分离多个日志消息源,则需要这样做。