首页 > 解决方案 > Python -Django-当我的主要日志记录逻辑在 settings.py 中时,如何设置日志文件名用户明智

问题描述

Django 会话:如何在每个日志记录中包含会话 ID?

设置.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 在此中变得过分了。

标签: javapythondjangosessionlogging

解决方案


推荐阅读