下面是我实践过程中遇到的一些经验和教训的总结。
1. 一个简单的日志系统示例开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件
#!/usr/bin/env python
#encoding: utf-8import logging#创建一个logger实例
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)#创建一个handler,用于写入日志文件
fh = logging.FileHandler('simple_log.log')
fh.setLevel(logging.DEBUG)#创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)#定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)#给logger添加handler
logger.addHandler(fh)
logger.addHandler(ch)#记录一条日志
logger.info('foobar')
运行后, 在控制台和日志文件都有一条日志:
NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
logging.debug('This message should appear on the console')
child_logger = logging.getLogger('foo.bar')
什么是effective level
logger有一个概念,叫effective level。 如果一个logger没有显示地设置level,那么它就#!/usr/bin/env python
#encoding: utf-8import logginglogging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
logging.debug('This message should appear on the console')r = logging.getLogger()ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
r.addHandler(ch)p = logging.getLogger('foo')
p.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(message)s')
ch.setFormatter(formatter)
p.addHandler(ch)c = logging.getLogger('foo.bar')
c.debug('foo')
输出如下:
import logging from conf import settingsdef logger(log_type):# 生成 logger 对象logger = logging.getLogger(log_type)logger.setLevel(settings.LOG_LEVEL)# 生成handler对象,向文件输出...
全卷积网络(FCN) 1.全卷积神经网络介绍 FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的fea...
printf()函数优点在于可以格式化输出 格式: %['padding_character][-][width][.precision]type 所有的转换说明都是以%开始,如果想打印一个%符号,必须用%% ; 参数“'padding_character”是可选,它将被用来填充变量直至所指定的宽度,该参...
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。 输入格式: 输入在一行中给出一个长度不超过10000的、仅...
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。 输入格式: 输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。 输出格式: 首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。 输入样例:...
python面试题目 原文地址:https://www.usblog.cc/blog/post/justzhl/b5cc9a05c7d2 问题一:以下的代码的输出将是什么? 说出你的答案并解释。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Parent(object): x...
ELK:(ELK 由 ElasticSearch 、 Logstash 和 Kiabana 三个开源工具组成),Elasticsearch用于存储日志信息,Logstash用于收集日志,Kibana用于图形化展示。上一节我们介绍了如何使用docker-compose搭建ELK日志分析系统。传送门:传说中的ELK日志分析系统,手把手教你...
欢迎关注头条号:老顾聊技术精品原创技术分享,知识的组装工目录前言常用日志组件什么是日志门面和日志实现常见的日志框架日志使用@slf4j注解日志的配置logback-spring配置总结前言日志是我们系统必备的功能之一,可以帮助我们开发人员定位系统的异常、错误以及运行流程的重要的工具。今天老顾就来介绍一下Spring boot的默认的l...
glog简介 glog是著名的google开源C++日志库glog(https://github.com/google/glog)的golang版本,glog是一个轻量级的日志库,上手简单不需要配置文件并且稳定高效,可以自定义控制的内容比较少。 glog主要有以下几个特点: 1. glog有四种日志等级INFO < WARING...
应用场景 该配置文件用于ATS用作反向代理模式,访问日志被server域名分隔。比如,我想将sohu和ifeng的域名的日志分别记在两个不同的日志文件中,其它的日志统一记在默认的日志文件中。 配置 为了将不同源站的HTTP transaction记录在不同的日志文件中,你必须在log_hosts.config中列举出每...
缘起 近来因为公司项目需要,阅读了一部分ATS logging system的源码实现,越发觉得logs_xml.config文件的配置非常重要,而我目前只是实践了一点它的皮毛。为此,根据自己的理解,翻译了官网的这篇文档,以作备忘。 logs_xml.config文件定义了自定义日志文件格式,过滤器和处理选项。文件格式采用x...