Django中间件和日志过滤器,为作为请求一部分生成的每个日志消息附加一个唯一的ID

django-log-labeler的Python项目详细描述


django原木贴标机

Django中间件和日志筛选器,用于将头中的值附加到作为请求的一部分生成的每个日志消息。

作者:Hermann Stephane Ntsamo

示例

{"message": "Hello World", "correlation_id": "6da1d73a-9a72-4206-93a4-bac892b76784", "session_id": "none", "app_id": "none", "nim_user": "none", "app_version": "none"}

安装和使用

首先,安装包:pip install django-log-labeler

将中间件添加到您的MIDDLEWARE_CLASSES设置中。在

^{pr2}$

下面是LOGGING设置的示例:

DEFAULT_LOG_LEVEL=os.getenv('LOGGING_LEVEL','INFO')LOG_LABEL_REQUEST_SETTING={"correlation_id":"HTTP_NIM_CORRELATION_ID","session_id":"HTTP_NIM_SESSION_ID","app_id":"HTTP_NIM_APP_ID","nim_user":"HTTP_NIM_USER","app_version":"HTTP_NIM_APP_VERSION",}LOG_LABEL_EXCLUDE_LOG_LIST=["","django"]#Case InsensitiveLOG_LABEL_OBFUSCATE={"headers":["Authorization"],"body":[("PasswordText",Obfuscation_Type.XML),("sessionID",Obfuscation_Type.XML),("password",Obfuscation_Type.JSON),("token",Obfuscation_Type.JSON)],"response":[("sessionID",Obfuscation_Type.XML),("password",Obfuscation_Type.JSON),("token",Obfuscation_Type.JSON),("sessionid",Obfuscation_Type.JSON,)],"url":[("token",Obfuscation_Type.URL),]}LOGGING={'version':1,'disable_existing_loggers':False,'filters':{'request_id':{'()':'log_labeler.filters.HeaderToLabelFilter'}},'formatters':{'json':{'()':'pythonjsonlogger.jsonlogger.JsonFormatter','format':'%(message)s'}},'handlers':{'console':{'level':'DEBUG','class':'logging.StreamHandler','filters':['request_id'],'formatter':'json',},},'loggers':{'log_labeler.middleware':{'handlers':['console'],'level':'DEBUG','propagate':False,},'gunicorn.access':{'handlers':['console'],'level':'INFO','propagate':False,},}}NIM_DJANGO_REQUEST_LOG_LEVEL_NAME="HTTP_NIM_DJANGO_REQUEST_LOG_LEVEL"MAX_REQUEST_RESPONSE_SIZE=os.getenv('MAX_REQUEST_RESPONSE_SIZE','OFF')

然后可以像往常一样输出日志消息:

importlogginglogger=logging.getLogger(__name__)logger.debug("Hello world!")

设置说明:

默认日志级别 如果未指定其他日志级别,则应用于记录器的默认日志级别

日志标签请求设置 将HTTP头映射到日志项的键/值对列表

日志标签不包括日志列表 动态更改日志级别时要忽略的记录器列表

日志标签混淆 有模糊规则的词典

#ŠŠŠŠ 用于更改日志记录级别的标头的名称。例如:调试、信息、错误。。。在

最大请求响应大小 请求和响应成功时允许的最大大小。错误消息未被截断。在

许可证

版权所有©2012-2018,DabApps。在

版权所有。在

以源代码和二进制形式重新分发和使用,有无 如果满足以下条件,则允许修改:

重新分发源代码必须保留上述版权声明,此 条件列表和以下免责声明。 二进制形式的再分配必须复制上述版权声明,此 文件中的条件列表和以下免责声明和/或 分发时提供的其他材料。 本软件由版权所有人和贡献者“按原样”提供,并且 任何明示或暗示的保证,包括但不限于 适销性和适用于特定用途的保证 否认。在任何情况下,版权持有人或贡献者不承担任何责任 对于任何直接的、间接的、偶然的、特殊的、示范性的或后果性的 损害赔偿(包括但不限于采购替代货物或 服务;使用、数据或利润损失;或业务中断) 根据任何责任理论,无论是在合同中,严格责任, 或因使用而产生的侵权行为(包括疏忽或其他) 即使被告知有这种损坏的可能性。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java提供了大量的Quartz工作线程   来自SOAPException的java抛出超时异常   java通过REST web服务同步PostgreSQL过程调用   java Hibernate:在关联表中设置值   javaimapidlechanneladapterjavax。邮政AuthenticationFailedException:[警报]同时连接太多   JavaApacheStorm:stormkafkamonitor脚本引发异常   java将jar链接到战争   Matlab与Java的集成方法   安卓公司。谷歌。ads.AdView未能实例化java。lang.ClassNotFoundException:org。json。JSONException   “String forecastStr=mForecastAdapter.getItem(position);”行中出现java错误阳光工程   java如何将Mono中的列表属性作为流量进行操作?   java DecimalFormat类不必要地给出整数   java@IfProfileValue两个spring配置文件   java如何使用SwingWorker创建多线程?   java从扩展SwingWorker的内部类触发事件   java二叉树高度实现