Logging系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Logging系统相关的知识,希望对你有一定的参考价值。
参考技术A 许多大型系统都支持某种消息记录工具,而ns-3也不例外。在某些情况下,只会将错误消息记录到“操作员控制台”(在基于Unix的系统中通常是stderr)。在其他系统中,可以输出警告消息以及更详细的信息消息。在某些情况下,日志记录工具用于输出调试消息,这些消息可以快速将输出变为模糊。ns-3认为所有这些详细级别都很有用,我们为消息记录提供了一种可选择的多级方法。可以完全禁用日志记录,逐个组件启用或全局启用日志记录;它提供了可选择的详细级别。 ns-3日志模块提供了一种简单易用的方法,可以从模拟中获取有用的信息。
您应该了解我们提供了一个通用机制 - 跟踪 - 从模型中获取数据,这些数据应该是模拟输出的首选(有关我们的跟踪系统的更多详细信息,请参阅教程部分使用跟踪系统)。对于调试信息,警告,错误消息,或者您希望轻松从脚本或模型中快速发送消息的任何时间,应首选日志记录。
目前,系统中定义了七个级别日益增加的详细日志消息。
LOG_ERROR - 记录错误消息(关联的宏:NS_LOG_ERROR);
LOG_WARN - 记录警告消息(关联的宏:NS_LOG_WARN);
LOG_DEBUG - 记录相对罕见的临时调试消息(关联的宏:NS_LOG_DEBUG);
LOG_INFO - 记录有关程序进度的信息性消息(相关宏:NS_LOG_INFO);
LOG_FUNCTION - 记录描述每个被调用函数的消息(两个相关的宏:NS_LOG_FUNCTION,用于成员函数,NS_LOG_FUNCTION_NOARGS,用于静态函数);
LOG_LOGIC - 记录描述函数内逻辑流的消息(相关宏:NS_LOG_LOGIC);
LOG_ALL - 记录上面提到的所有内容(没有关联的宏)。
对于每个LOG_TYPE,还有LOG_LEVEL_TYPE,如果使用它,除了它的级别之外,还可以记录它上面的所有级别。 (因此,LOG_ERROR和LOG_LEVEL_ERROR以及LOG_ALL和LOG_LEVEL_ALL在功能上是等效的。)例如,启用LOG_INFO将仅启用NS_LOG_INFO宏提供的消息,而启用LOG_LEVEL_INFO还将启用NS_LOG_DEBUG,NS_LOG_WARN和NS_LOG_ERROR宏提供的消息。
我们还提供始终显示的无条件记录宏,无论记录级别或组件选择如何。
NS_LOG_UNCOND - 无条件地记录关联的消息(没有关联的日志级别)。
每个级别可以单独或累积请求;并且可以使用shell环境变量(NS_LOG)或通过记录系统函数调用来设置日志记录。正如本教程前面所见,日志记录系统具有Doxygen文档,如果您还没有这样做,现在是阅读日志记录模块文档的好时机。
现在您已经非常详细地阅读了文档,让我们使用一些知识从您已经构建的scratch / myfirst.cc示例脚本中获取一些有趣的信息。
Django Logging
Django Logging
组成部分
Loggers
Handlers
Filters
Formatters
Loggers
loggers是记录系统的入口。他具有日志级别,定义的日志级别如下
DEBUG:用于调试目的的低级系统信息
INFO: 一般系统信息
WARNING: 警告信息
ERROR:错误信息
CRITICAL:关键错误信息
NOTEST: 记录所有
写入logger的每条消息都是日志记录。每个日志记录还具有一个日志级别,表示该消息的严重性。日志记录还可以包含描述正在记录会见的有用元数据。这可以包括诸如堆栈跟踪或错误代码之类的详细信息。
如果消息日志级别达到或超过loggers本身的日志级别,则进行下一步处理,如果没有,则忽略。
一旦记录器确定需要处理消息,他就会传递给Handler。
Handler
Handler是负责进行处理。例如将消息写入屏幕,文件或者socket。
Handler也具有日志级别,如果未达到Handeler的日志级别,则忽略
loggers可以有多个Handler,可以定义不同的日志级别。
Filters
Filters用于提供对从loggers到Handler的日志记录传递的额外控制。
默认情况下,处理所有满足日志级别要求的任何日志消息。也可以自定义其他条件
Formatters
格式化输出。格式化程序通常由包含LogRecord属性的Python格式化字符串组成
配置日志记录
默认情况下Django使用dictConfig格式,配置日志记录。
参考网址
https://docs.python.org/3/library/logging.handlers.html
dictConfig必填
version 目前唯一有效的值为1
其他都是可选的
如果dictConfig中的disable_existing_loggers
键LOGGING
设置为True
(默认值),则将禁用默认配置中的所有记录器。已禁用的记录器与已删除的记录器不同; 记录器仍然存在,但会默默地丢弃记录到它的任何内容,甚至不会将条目传播到父记录器。因此你应该非常小心使用; 它可能不是你想要的。相反,您可以设置到和重新定义的部分或全部的默认记录器; 或者您可以设置 到和处理日志记录配置己。‘disable_existing_loggers‘: True
disable_existing_loggers
False
LOGGING_CONFIG
None
示例文件
LOGGING = { ‘version‘: 1, ‘disable_existing_loggers‘: False, ‘handlers‘: { ‘file‘: { ‘level‘: ‘DEBUG‘, ‘class‘: ‘logging.FileHandler‘, ‘filename‘: ‘/path/to/django/debug.log‘, }, }, ‘loggers‘: { ‘django‘: { ‘handlers‘: [‘file‘], ‘level‘: ‘DEBUG‘, ‘propagate‘: True, }, }, }
logging.FileHandler 发送日志输出到磁盘文件
logging.StreamHandler 发送日志输出sys.stdout的,sys.stderr或任何类文件对象
logging.NullHandler 不做任何输出
propagate 向上级传递
logging.handlers.RotatingFileHandler 根据日志大小进行日志轮询
代码中打印日志
import logging logger = logging.getLogger("django") logger.info("hello word!")
打印日志输出到屏幕
import os LOGGING = { ‘version‘: 1, ‘disable_existing_loggers‘: False, ‘handlers‘: { ‘console‘: { ‘class‘: ‘logging.StreamHandler‘, }, }, ‘loggers‘: { ‘django‘: { ‘handlers‘: [‘console‘], ‘level‘: os.getenv(‘DJANGO_LOG_LEVEL‘, ‘INFO‘), }, },
}
复杂的日志格式
LOGGING = { ‘version‘: 1, ‘disable_existing_loggers‘: False, ‘formatters‘: { ‘verbose‘: { ‘format‘: ‘%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s‘ }, ‘simple‘: { ‘format‘: ‘%(levelname)s %(message)s‘ }, }, ‘filters‘: { ‘special‘: { ‘()‘: ‘project.logging.SpecialFilter‘, ‘foo‘: ‘bar‘, }, ‘require_debug_true‘: { ‘()‘: ‘django.utils.log.RequireDebugTrue‘, }, }, ‘handlers‘: { ‘console‘: { ‘level‘: ‘INFO‘, ‘filters‘: [‘require_debug_true‘], ‘class‘: ‘logging.StreamHandler‘, ‘formatter‘: ‘simple‘ }, ‘mail_admins‘: { ‘level‘: ‘ERROR‘, ‘class‘: ‘django.utils.log.AdminEmailHandler‘, ‘filters‘: [‘special‘] } }, ‘loggers‘: { ‘django‘: { ‘handlers‘: [‘console‘], ‘propagate‘: True, }, ‘django.request‘: { ‘handlers‘: [‘mail_admins‘], ‘level‘: ‘ERROR‘, ‘propagate‘: False, }, ‘myproject.custom‘: { ‘handlers‘: [‘console‘, ‘mail_admins‘], ‘level‘: ‘INFO‘, ‘filters‘: [‘special‘] } } }
以上是关于Logging系统的主要内容,如果未能解决你的问题,请参考以下文章
python的日志模块:logging;django的日志系统
当我使用 Python 的 logging.handlers.SysLogHandler 时,系统日志消息显示为“未知”