Django命令和视图的多处理器日志记录,带共享函数

2 投票
1 回答
543 浏览
提问于 2025-04-20 06:15

是否可以将命令和视图的日志记录到不同的日志文件中,同时使用一个公共的函数来处理命令和视图?把记录器作为函数参数传递肯定不是一个好的设计。

settings.py

'loggers': {
    'Web': {
        'handlers': ['logfile_website'], # -> views.log
    'Commands': {
        'handlers': ['logfile_commands'], # -> commands.log
}

views.py -> 记录到 views.log 文件中

log = logging.getLogger('Web')
def index(request):
    log.info('In view')
    my_common.common_function(1)

command.py -> 记录到 commands.log 文件中

log = logging.getLogger('Commands')
class Command(BaseCommand):
    def handle(self, *args, **options):
        log.info('In command')
        my_common.common_function(2)

my_common.py -> 根据调用者的不同记录到相应的位置

def common_function(param):
    log = How to get logger based on current call stack?
    log.info('In common function')

1 个回答

0

你可以使用一个统一的处理程序,这个处理程序会根据环境选择不同的文件名。例如,在POSIX系统上,

LOG_FILENAME = os.environ.get('LOGFILE', 'views.log')

# then use the filename in your configuration

然后你可以用下面的方式运行命令

LOGFILE=commands.log python manage.py syncdb

这里我用syncdb作为一个命令的例子。

撰写回答