Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django不会将日志写入文件_Django_Python 3.x_Logging - Fatal编程技术网

Django不会将日志写入文件

Django不会将日志写入文件,django,python-3.x,logging,Django,Python 3.x,Logging,我对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".forma

我对
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)
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))
我已经创建了一个名为
/var/log/eshot api
的目录,并以
chmod 777
的身份向该目录授予了权限,这样就不会出现写入问题

我还创建了一个函数,如下所示:

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)
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))
方法
参数是一个字符串,用于将“GET”或“POST”传递给此函数

我把它放在了
ClassBasedView
的all
get
函数的开头。但是,当我运行并刷新页面几次以生成一些日志并查看日志文件时,它们是空的

我想说的是,这是我自己计算机中的一个开发服务器


环境
  • django 1.9.6
  • ubuntu 14.04
  • python 3.5.1

检查settings.py中的
日志记录={…}
设置,并确保它已将
禁用现有的\u记录器设置为
False

LOGGING = {
    ...
    'disable_existing_loggers': False,
    ..
}
或者完全删除日志记录设置。并将处理程序添加到记录器:

logger.addHandler(log_handlers["file_debug"])
我也喜欢

完全工作示例

url.py

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

urlpatterns = [
    url(r'^$', IndexView.as_view()),
]
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')
views.py

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

urlpatterns = [
    url(r'^$', IndexView.as_view()),
]
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,
}

谢谢你的文档,我会参考的。然而,这并没有改变问题。日志仍然是空的。我会尝试文档化的方式,如果一切顺利,那么我会接受这个答案。谢谢…可能的副本。同时向我们展示您的
日志记录
配置。