2016-06-12 2 views
1

У меня есть пользовательская конфигурация для журналов в views.py, как показано ниже:Джанго не пишут Бревна в файл

logger = logging.getLogger(__name__) 
logger.setLevel(logging.DEBUG) 

# Handlers 
log_handlers = { 
    "terminal": logging.StreamHandler(), 
    "file_debug": logging.FileHandler("/var/log/eshot-api/{name}-{level}.log".format(name=__name__, level="DEBUG"), mode="w"), 
    "file_error": logging.FileHandler("/var/log/eshot-api/{name}-{level}.log".format(name=__name__, level="ERROR"), mode="w") 
} 

log_handlers["terminal"].setLevel(logging.INFO) 
log_handlers["file_debug"].setLevel(logging.DEBUG) 
log_handlers["file_error"].setLevel(logging.ERROR) 

# Formatters 
log_formatters = { 
    "terminal": logging.Formatter("[%(name)s]::[%(levelname)s]@[%(asctime)s]: %(message)s"), 
    "file_debug": logging.Formatter("[%(levelname)s]@[%(asctime)s]: %(message)s"), 
    "file_error": logging.Formatter("[%(asctime)s]: %(message)s") 
} 

for k, v in log_formatters.items(): 
    log_handlers[k].setFormatter(v) 

Я не создал каталог как /var/log/eshot-api и дано разрешения как chmod 777 в этот каталог, так что не будет никаких проблема для письма.

Я также создал функцию, как показано ниже:

def initial_log(request, method): 
    logger.debug("{ip} requested {path} with {kwargs} in {method} method".format(ip=ipaddr(request), path=request.get_full_path(), kwargs=str(dict(request.GET)), method=method)) 

method аргумент является строкой, чтобы пройти «GET» или «POST» для этой функции.

И я положил это в начале моей всей функции getClassBasedView. Однако, когда я запускаю и обновляю страницу за пару раз, чтобы генерировать некоторые журналы и просматривать мои файлы журналов, они пусты.

И я хочу упомянуть, что это сервер разработки на моем собственном компьютере.


Environment

  • Джанго 1.9.6
  • убунту 14,04
  • питон 3.5.1
+1

Возможный дубликат [Почему запись в Django не работает] (http://stackoverflow.com/questions/36571284/why-django-logging-is-not-working). Также покажите нам свою конфигурацию 'LOGGING'. – solarissmoke

ответ

1

Проверьте settings.py для установки LOGGING = {...} и убедитесь, что он имеет disable_existing_loggers, установленный на False:

LOGGING = { 
    ... 
    'disable_existing_loggers': False, 
    .. 
} 

Или полностью удалите установку LOGGING. И добавить обработчики к регистратору:

logger.addHandler(log_handlers["file_debug"]) 

i'de Кроме того, как к advise you to configure LOGGING in your settings.py.

Полностью рабочий пример

urls.py:

from django.conf.urls import url 
from .views import IndexView 

urlpatterns = [ 
    url(r'^$', IndexView.as_view()), 
] 

views.py:

import logging 
from django.http import HttpResponse 
from django.views.generic import View 

logger = logging.getLogger(__name__) 
logger.setLevel(logging.DEBUG) 

# Handlers 
log_handlers = { 
    "terminal": logging.StreamHandler(), 
    "file_debug": logging.FileHandler("/var/log/eshot-api/{name}-{level}.log".format(name=__name__, level="DEBUG"), mode="w"), 
    "file_error": logging.FileHandler("/var/log/eshot-api/{name}-{level}.log".format(name=__name__, level="ERROR"), mode="w") 
} 

log_handlers["terminal"].setLevel(logging.INFO) 
log_handlers["file_debug"].setLevel(logging.DEBUG) 
log_handlers["file_error"].setLevel(logging.ERROR) 

# Formatters 
log_formatters = { 
    "terminal": logging.Formatter("[%(name)s]::[%(levelname)s]@[%(asctime)s]: %(message)s"), 
    "file_debug": logging.Formatter("[%(levelname)s]@[%(asctime)s]: %(message)s"), 
    "file_error": logging.Formatter("[%(asctime)s]: %(message)s") 
} 

for k, v in log_formatters.items(): 
    log_handlers[k].setFormatter(v) 

logger.addHandler(log_handlers['file_debug']) 

class IndexView(View): 
    def get(self, request): 
     logger.debug("requested {path} with {kwargs} in method".format(path=request.get_full_path(), kwargs=str(dict(request.GET)))) 
     return HttpResponse('app:index') 

settings.py

LOGGING = { 
    'disable_existing_loggers': False, 
} 
+0

Спасибо за документацию, я назову это. Однако это не изменило проблему. Журналы по-прежнему пусты. Я попробую использовать документацию, и если все будет хорошо, я отвечу на этот ответ как действительный. Спасибо ... –

+0

Я добавил полностью рабочий пример. –

Смежные вопросы