java - Python -Django-当我的主要日志记录逻辑在 settings.py 中时,如何设置日志文件名用户明智
问题描述
设置.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'custom_logging_filter': {
'()': 'common.utils.logger_handler.custom_logger.CustomLoggingFilter',
},
},
'formatters': {
'file': {
'format': ('%(asctime)s '
'%(levelname)-8s %(c_user)s '
'%(pathname)s : %(lineno)s: %(funcName)s : %(message)s'),
},
},
'handlers': {
'base_file': {
'level': 'DEBUG',
'filters': ['custom_logging_filter'],
'class': 'logging.FileHandler',
'formatter': 'file',
'filename': '%(c_user)s.log',
},
},
'loggers': {
'': {
'handlers': ['base_file', ],
'level': 'DEBUG',
'propagate': True,
},
},
}
我提到了这篇文章,它对我有用。我想为每个用户动态设置文件名/文件路径。user1.log,user2,log 像这样。但是我尝试了我所知道的所有事情,任何人都可以帮助我。
custom_loggin 文件
import logging
import os
import datetime
from Mlaas.thread_local import get_local_thread_value
class CustomLoggingFilter(logging.Filter):
"""
If logging handler is configured with this filter,
a log record is updated with User information.
These attributes can be accessed by any logging formatter,
as for example: %(c_session_id).
The filter() method must return True, to ensure the record is logged.
"""
def filter(self, record):
record.c_user = get_local_thread_value('c_user')
return True
class SetPath(logging.FileHandler):
def FileHandler(self, record):
logging.error('check-1-2-3-4-')
c_user = get_local_thread_value('c_user')
return True
class LogClass():
def custom():
return 0
我想为每个新用户创建文件夹和文件
user1 folder
17-9-21.log
user2 folder
17-9-21.log
user3 folder
17-9-21.log
log_path = './logs/' + self.user_name #log path of user folder
if os.path.exists(log_path): #check user folder is already exist or not
pass
else:
# os.mkdir(log_path) #use to create user folder with username
filename=str(current_date) +'.log' #set file name with current date
logging.basicConfig(level=logging.DEBUG,filename=log_path+'/'+ filename,force=True, format='%(asctime)s : %(levelname)s : '+page_name+' : %(pathname)s : %(lineno)s: %(funcName)s : %(message)s')
这是我的旧代码,它可以很好地创建用户明智的文件夹,但 user_name 在此中变得过分了。
解决方案
推荐阅读
- c++ - C++ windows.h 写入文件函数
- ssl - 如何使用服务器端配置(Nginx)强制浏览器获取新的 SSL 证书而不是旧的证书?
- java - 在 Observable 中超时时发出项目
- php - PHP - 需要帮助完成 Google Sheets API 请求
- c - 函数类似于 pipe(3) 但返回 FILE *
- javascript - 如何最好地将脚本从 PageSpeed Insights 中排除?
- powershell - 创建脚本以从 AD 获取用户特定的详细信息
- css - 如何垂直居中这个元素?
- python-2.7 - 如何在 sqlite3 中使用从列表中获取的列名创建一个表?
- javascript - 如何在javascript中检查页面的加载时间?