我知道这个问题已经被问了好几次了,但我就是不能让它起作用。我已经花了半天的时间尝试了几十种组合,现在又试了一次,仍然不起作用。
在我的代码中,我记录了几个部分,比如在一次尝试中--除了或者记录一些来自管理命令的信息。我只是在做一些非常普通的事情,就是在几个本地安装和一些Nginx服务器上工作。
如下所示的python文件:
import logging
logger = logging.getLogger(__name__)
logger.info('some important infos')使用以下作为最小的settings.py (我尝试了不使用流指示,不指定记录器,使用命名记录器,几乎所有可能的组合,我也尝试了更复杂的组合)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'stream': sys.stdout
}
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
'level': 'INFO',
},
'': {
'handlers': ['console'],
'level': 'INFO',
}
}
}然后还简单地从外壳heroku run python进行了测试
import logging
level = logging.INFO
handler = logging.StreamHandler()
handler.setLevel(level)
handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
logger = logging.getLogger('info')
logger.addHandler(handler)
logger.setLevel(level) #even if not required...
logger.info('logging test')最后一个可能会在控制台中显示为"print“语句,但无论是在这里还是在命令或服务器中,都不会在heroku logs中显示任何内容。
编辑:实际上我有一些条目显示出来,应用程序日志如下,只是不是我的:
2013-09-20T15:00:16.405492+00:00 heroku[run.2036]: Process exited with status 0
2013-09-20T15:00:17+00:00 app[heroku-postgres]: source=HEROKU_POSTGRESQL_OLIVE sample[...]
2013-09-20T14:59:47.403049+00:00 heroku[router]: at=info method=GET path=/
2013-09-20T14:59:16.304397+00:00 heroku[web.1]: source=web.1 dyno=heroku [...]我还尝试使用几个插件来查找条目。我有一段时间在开始的newrelic,然后我也停用了从WSGI启动。我不记得当时它是否运行良好,新遗物的免费测试期相当短。
嗯,我不知道我还能做什么……谢谢你的任何提示
发布于 2014-01-08 06:44:13
从Django登录Heroku一开始可能很棘手,但实际上设置起来并不是那么可怕。
下面的日志定义(在您的设置文件中)定义了两个格式化程序。详细的一个匹配Heroku本身使用的日志记录格式。它还定义了两个处理程序,一个null处理程序(不需要使用)和一个控制台处理程序-控制台处理程序就是您希望与Heroku一起使用的处理程序。这样做的原因是Heroku上的日志通过一个简单的流记录器工作,将任何输出记录到stdout/stderr。最后,我定义了一个名为testlogger的日志记录器--日志记录定义的这一部分就像日志记录定义一样。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': ('%(asctime)s [%(process)d] [%(levelname)s] ' +
'pathname=%(pathname)s lineno=%(lineno)s ' +
'funcname=%(funcName)s %(message)s'),
'datefmt': '%Y-%m-%d %H:%M:%S'
},
'simple': {
'format': '%(levelname)s %(message)s'
}
},
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'logging.NullHandler',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
}
},
'loggers': {
'testlogger': {
'handlers': ['console'],
'level': 'INFO',
}
}
}下一步,如何使用它。在这个简单的例子中,您可以在Django项目中的任何其他文件中执行以下操作,以写入我们定义的这个特定的记录器(testlogger)。请记住,根据我们设置文件中的记录器定义,将输出任何INFO或更高版本的日志消息。
import logging
logger = logging.getLogger('testlogger')
logger.info('This is a simple log message')发布于 2019-01-31 00:38:55
在我的例子中,我确实有一个有效的日志记录设置
LOGGING = {...}不幸的是,它被忽略了,因为在我的设置文件的底部,我调用了
django_heroku.settings(locals())这会覆盖我的日志设置,因此解决方案是
django_heroku.settings(locals(), logging=False)这看起来可能会禁用日志记录,但实际上它只是跳过了heroku自己的日志记录配置。
顺便说一句,我会在调试Django日志问题时使用这段代码,因为它或多或少应该始终使用Django默认值:
import logging
logger = logging.getLogger('django.server')
logger.error('some important infos')请参阅Django's default logging config
然后,您可以更改记录器、消息级别和日志记录设置,以准确地找出问题所在。
发布于 2013-09-21 06:02:47
你需要手动“激活”你的记录器。您可以按模块执行此操作,如“blog.views”。它会提取子模块,所以要记录整个博客应用程序,只需输入' blog‘即可。
如果您将其保留为空,它将记录以前未使用propagate=True (非默认值)处理的所有内容。这还将记录所有的Django,这意味着在调试级别上,您将在日志中获得SQL查询。
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'blog.views': {
'handlers': ['console'],
},
'blog': {
'handlers': ['console'],
},
'': {
'handlers': ['console'],
'level': 'DEBUG', # Not recommended.
}
}https://stackoverflow.com/questions/18920428
复制相似问题