基于Python log 的正确打开方式
保存代码到文件:logger.py
import os import logbook from logbook.more import ColorizedStderrHandler import smtplib LOG_DIR = os.path.join('log') if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR) def get_logger(name='test', file_log=False): logbook.set_datetime_format('local') ColorizedStderrHandler(bubble=False).push_application() if file_log: logbook.TimedRotatingFileHandler(os.path.join(LOG_DIR, '%s.log' % name), date_format='%Y%m%d', bubble=True).push_application() return logbook.Logger(name) LOG = get_logger(file_log=True) def send_email(email_conf, message): smtp = smtplib.SMTP() smtp.connect(email_conf['host'], email_conf['port']) smtp.login(email_conf['user'], email_conf['password']) smtp.sendmail(email_conf['fromaddr'], email_conf['recipients'], message.as_string())
使用方法:
from logger import LOG if __name__ == "__main__": LOG.info('Checking %s:%s ...' % (str(date), str(data_type)))
以上这篇基于Python log 的正确打开方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
您可能感兴趣的文章:
- python实现log日志的示例代码
- python 通过logging写入日志到文件和控制台的实例
相关推荐
-
python实现log日志的示例代码
源代码: # coding=utf-8 import logging import os import time LEVELS={'debug':logging.DEBUG,\ 'info':logging.INFO,\ 'warning':logging.WARNING,\ 'error':logging.ERROR,\ 'critical':logging.CRITICAL,} logger=logging.getLogger() level='default' def createFile
-
python 通过logging写入日志到文件和控制台的实例
如下所示: import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) # 创建一个handler,用于写入日志文件 fh = logging.FileHandler('test.log') fh.setLevel(logging.DEBUG) # 再创建一个handler,用于输出到控制台 ch = logging.StreamHandler() ch.set
-
基于Python log 的正确打开方式
保存代码到文件:logger.py import os import logbook from logbook.more import ColorizedStderrHandler import smtplib LOG_DIR = os.path.join('log') if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR) def get_logger(name='test', file_log=False): logbook.set_date
-
基于python的多进程共享变量正确打开方式
多进程共享变量和获得结果 由于工程需求,要使用多线程来跑一个程序.但是因为听说python的多线程是假的,于是使用多进程,反正任务需要共享的参数少. 查阅资料,发现实现多进程主要使用Multiprocessing,有两种方式,一种是Process,另一种是Pool. p = Process(target=fun,args=(args)) 再通过p.start()来启动一个子进程,通过p.join()方法来使得子进程运行结束后再执行父进程. 但是这样很烦,还要写个for 循环来开n个线程和join
-
python中四舍五入的正确打开方式
round()函数 (注意:下面的我也不清楚是否正确,我只是发表一下我的观点) 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可 强烈建议不要去深究,就直接得结果就好 ndigiths可以为正数,也可以为负数,还可以为0,可以为空 n:就是精确到第n位小数,对整数没有影响,1为精确到十分位(注意:小数就是从十分位往后推的) -n:就是精确到整数位,-1为精确到十位,然后就是百位千位-有小数位就全舍掉,不管多大,但会保留一个为0的小数位 0:精确到个位,但会保留
-
TypeScript中extends的正确打开方式详解
目录 前言 extends第一式:继承 类继承类 接口继承接口 接口继承类 extends第二式:三元表达式条件判断 普通的三元表达式条件判断 情况一:Type1和Type2为同一种类型. 情况二:Type1是Type2的子类型. 情况三: Type2类型兼容类型Type1. 带有泛型的三元表达式条件判断 extends第三式:泛型约束 前言 最近完整地看了一遍TypeScript的官方文档,发现文档中有一些知识点没有专门讲解到,或者是讲解了但却十分难以理解,因此就有了这一系列的文章,我将对没有
-
vue-cli + sass 的正确打开方式图文详解
关于在vue-cli搭建的项目中怎么配置sass,网上搜到的基本是这种答案: 但是我认为,直接将样式写在每个单文件的<style>里,是十分不明智的做法.且不说node-sass安装过程的各种坑,内嵌的<style>也让组件显得十分混乱.想象一下你在修改某个methods时必须拖动滚轮穿越几十上百行的css代码,又或者为了修改一组样式,却找不到对应的css文件,因为它们散布在vue文件里... 在我看来,正确的做法应该是单独管理sass文件,然后在main.js中直接引入编译好的c
-
基于python log取对数详解
log()方法返回x的自然对数,对于x>0. 语法 以下是log()方法的语法: import math math.log( x ) 注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数. 参数 x – 这是一个数值表达式. 返回值 此方法返回x的自然对数,对于x>0. 另外,可以通过log(x[, base])来设置底数,如 log(x, 10) 表示以10为底的对数. 以上这篇基于python log取对数详解就是小编分享给大家的全部内容了
-
云开发 VSCode 插件 Cloudbase Toolkit 的正确打开方式及应用场景分析
什么是 Cloudbase Toolkit Tencent CloudBase Toolkit 是云开发的 VS Code(Visual Studio Code)插件.该插件可以让您更好地在本地进行云开发项目开发和代码调试,并且轻松将项目部署到云端. Cloudbase Toolkit 将项目创建.函数上传.函数更新.函数本地调试等功能集成在 VSCode 的本地调试环境中,开发者可以通过简单的点击,完成云函数的更新.上传.同步等功能. 和 Cloudbase Cli 相比,Cloudbase
-
Spring原生Rpc六种的正确打开方式实现示例
目录 前言 什么是Rpc? Spring中的Rpc 定义服务接口 调用服务代码 WEBSERVICE的RPC实现 服务提供者 服务实现 服务暴露 服务消费者 HTTP的RPC实现 服务提供者 服务实现 服务暴露 服务消费者 文末结语 前言 在java生态圈谈到Rpc,很多人可能就会想到Dubbo.Motan.Grpc等框架.但是你知道吗?作为Java编程全家桶的Spring已经内置了多种RPC的实现方式,可以直接使用.存在即合理,有些场景下其实并不需要Dubbo,Grpc等重量级的RPC组件,那
-
.NET Core中HttpClient的正确打开方式
前言 在 Asp.Net Core 1.0 时代,由于设计上的问题, HttpClient 给开发者带来了无尽的困扰,用 Asp.Net Core 开发团队的话来说就是:我们注意到,HttpClient 被很多开发人员不正确的使用.得益于 .Net Core 不断的版本快速升级: 问题来源 长期以来,.NET开发者都通过下面的方式发送http请求: using (var httpClient = new HttpClient()) { var response = await httpClien
-
vue制作加载更多功能的正确打开方式
使用vue制作加载更多功能,通过ajax获取的数据往data里面push经常不成功,原因是push是往数组中追加数据内容的,而不能用作数组之间的拼接,ajax获取的数据就是数组形式的,因此不成功,应该使用concat()拼接两个数组. //这是错误的写法 $.ajax({ type:'get', async:false, url:path+'no/noticeMobile/getSendNoticeList?imToken='+ getToken +'&pageFlag=2', dataType
随机推荐
- Oracle存储过程基本语法介绍
- WinForm中如何预览Office文件
- C#匹配中文字符串的4种正则表达式分享
- Struts2截取字符串代码介绍
- iOS下border-image不起作用的解决办法
- 关于C++中的static关键字的总结
- 详解docker容器硬盘动态扩容
- PHP Yii框架之表单验证规则大全
- nginx禁止访问.git文件的设置教程
- sqlserver 不能将值NULL插入列id(列不允许有空值解决)
- 再谈Jquery Ajax方法传递到action(补充)
- 表单类各种类型(文本框)失去焦点效果jquery代码
- 复制js对象方法(详解)
- js程序中美元符号$是什么
- ThinkPHP 模板substr的截取字符串函数详解
- Android7.0中关于ContentProvider组件详解
- Java中的同步与异步详细介绍
- spring boot+vue 的前后端分离与合并方案实例详解
- JavaScript实现的级联算法示例【省市二级联动功能】
- 判断js数据类型的函数实例详解