我现在开始登录我的django项目(一次一步),我想知道是否有办法将我在我的代码中的位置放入使用python的错误消息中。即如果我在something.views.something_view
,如何获取此类/功能位置,然后将其标记为logging.error("something went wrong in "+???)
?
答案 0 :(得分:1)
您应该使用字典在应用程序级别(在settings.py中)配置日志记录,这样:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '[%(levelname)s] [%(asctime)s] [%(name)s:%(lineno)s] %(message)s',
'datefmt': '%d/%b/%Y %H:%M:%S'
},
},
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'logfile': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOGS_DIR, 'application.log'),
'maxBytes': 5242880, # 5MB
'backupCount': 10,
'formatter': 'standard',
},
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter': 'standard'
},
},
'loggers': {
'django': {
'handlers':['console'],
'level':'DEBUG',
'propagate': False,
},
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'DEBUG',
'propagate': False,
},
'com.mysite': {
'handlers': ['console', 'logfile'],
'level': 'DEBUG',
'propagate': True,
},
}
}
该行:
'format': '[%(levelname)s] [%(asctime)s] [%(name)s:%(lineno)s] %(message)s'
将产生一个日志输出,如:
[DEBUG] [11/Aug/2013 12:34:43] [com.mysite.apps.myapp.middleware.MyMiddleware:28] My log message
其中:
com.mysite.apps.myapp.middleware.MyMiddleware
是记录了您的消息的类,并且:28代码中的行。 在模块级别以这种方式配置记录器:
import logging
logger = logging.getLogger(__name__)
这样,您的记录器将使用完全限定的类名自动解析!
答案 1 :(得分:1)
您可以使用Python 2.3附带的logging module
您必须为记录器设置适当的格式化程序才能获得所需内容,因此必须设置
import logging
my_logger = logging.getLogger('my_first_logger')
my_logger.setLevel('INFO') # You can check docs for more info about levels
formatter = logging.Formatter(
"%(asctime)s %(levelname)s %(name)s %(process)d %(threadName)s %(module)s:%(lineno)d %(funcName)s() %(message)s\n\n\n" # You set your logger debug information here. Check docs for detailed info about what information you can log
filename = 'logs/my_first_log.log'
handler = logging.FileHandler(filename, mode='a')
handler.setFormatter(formatter)
my_logger.addHandler(handler)
)
用法:
import logging
my_log = logging.getLogger('my_first_logger')
my_log.info('Your log goes here...)
输出将如下:
2013-08-12 12:43:34,070 INFO my_code_file 26924 MainThread my_module:72 myFunc()你的日志就在这里......
更新:我忘了添加FileHandler
文件设置器。我修好了。您必须为要使用的每个日志文件执行此操作。如果要将所有活动记录到单个日志文件中。然后,您只需要设置一次logger对象。然后你将导入它并使用它。如果您有多个日志文件,则必须单独设置每个日志文件,然后您可以随意使用它:
my_log = logging.getLogger('my_first_logger')
my_log.info('Blah blah blah...')
答案 2 :(得分:0)
python inspect模块应该为您提供您所需的信息。
答案 3 :(得分:0)
记录器还可以选择记录进行日志调用的行号。您需要将%(lineno)d添加到格式化程序中。但要记录任意行号,您可以尝试以下行:
import inspect
info = inspect.getframeinfo(inspect.currentframe())
lineno = info.lineno
print info
print lineno
修改强>
在看到alecxe的评论后得到了上下文。你可以使用process_exception中间件或django信号got_request_exception https://docs.djangoproject.com/en/dev/ref/signals/#got-request-exception logger.exception()将为您记录堆栈跟踪