精华内容
下载资源
问答
  • django的学习笔记和使用记录

    万次阅读 多人点赞 2020-06-12 16:18:28
    django的学习笔记和使用记录django的学习笔记和使用记录我们为啥学django?简单搭建django的流程图详细学习教程1、python的安装这里不提,小编下一个博客会说这个,这里假设已经安装好python。直接开始安装django2、...

    django的学习笔记和使用记录

    各位帅比好!小编在这里和大家交流一下django的伟大和学习记录!有不对的地方,欢迎帅比们随时CALL我!

    我们为啥学django?

    Python作为当前最火爆最热门,也是最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django、Tornado、Flask、Twisted、Bottle和Web.py等,它们有的历史悠久,有的发展迅速,还有的已经停止维护,目前web开发的框架还是django比较流行,好用。
    好了,废话不多说,直接干!

    简单搭建django的流程图

    django的学习笔记和使用记录

    详细学习教程

    1、python的安装这里不提,小编下一个博客会说这个,这里假设已经安装好python。直接开始安装django

    django的学习笔记和使用记录

    2、创建应用

    django的学习笔记和使用记录

    3、激活应用

    django的学习笔记和使用记录

    4、配置数据库

    django的学习笔记和使用记录

    5、定义模型

    django的学习笔记和使用记录

    6、在数据库中生成数据表

    django的学习笔记和使用记录

    7、管理数据表

    django的学习笔记和使用记录

    8、设计表结构

    django的学习笔记和使用记录

    9、测试数据操作

    django的学习笔记和使用记录

    10、启动服务器

    django的学习笔记和使用记录

    11、admin站点管理

    django的学习笔记和使用记录
    就这样了,都看到这里了,点赞关注走一走吧,谢谢大家!
    django的学习笔记和使用记录

    展开全文
  • 程序员如何记笔记

    千次阅读 2020-01-09 16:44:27
    作为一个技术宅,很喜欢学习一些自己感兴趣的技术,在学习的过程中,深感记笔记非常的重要。对于成年人,记忆力比起年轻时候都会有不同程度衰减,由此记笔记尤甚重要。下面介绍一下这方面的心得。 笔记 笔记记得好,...

    作为一个技术宅,很喜欢学习一些自己感兴趣的技术,在学习的过程中,深感记笔记非常的重要。对于成年人,记忆力比起年轻时候都会有不同程度衰减,由此记笔记尤甚重要。下面介绍一下这方面的心得。

    笔记

    笔记记得好,即使过上几年,再次翻看,还能记忆犹新。

    笔记种类

    从程序员的眼中,根据内容,笔记可以分为:

    • 信息。任何你想记录的。比如:服务器地址,账号/密码,知识点等。
    • 代码。好的代码易于阅读。代码本身也要求添加的足够的描述。有种说法,代码是最好的文档。
    • 文档。个人,项目或者团队的活动中的内容,包括项目需求,设计,开发,测试文档等。文档主要用于公司或团队内部进行知识交流的。
    • 交互文档。混合了代码,图表和文档。一般是类似jupyter notebook这种格式,它的特点是交互,体现了在开发过程中,逐步思考的过程。常用于技术学习和数据分析报告。
    • 文章。经过自己整理,总结,或者创作出的内容。相对正式,常用wiki,blog等发布。

    对于一篇笔记,可以属于多个类别,比如:项目中的文档,可以通过blog单独发布出来,作为一篇文章分享给更多人。相对而言,交互文档会陌生一些,下面介绍一下。

    交互文档:jupyter notebook, zeppelin

    在学习Spark的时候,第一次接触了zeppelin,它是Web笔记形式的交互式数据查询分析工具,可以用scala和sql等语言展示数据,也可以用markdown来编写文档。这种代码,图表和文档混合的方式,真的感觉耳目一新。jupyter notebook也是如此,支持python, r, julia, and scala等40多种语言。下图中可以看到很多图表展示,和报表工具不同,在右上角的区域有可以修改的程序代码。这是一种专属于程序员的文档形式。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZtamLsn-1578559407559)(images/ApacheZeppelin_02.jpg)]


    什么是好笔记

    再来看看,什么是好的笔记应该有的特性。

    • 好理解: 好的笔记是容易理解的,对于要分享的笔记,尤其如此。
    • 易于复现: 常说,好的代码容易被测试,对于好的笔记,里面的内容也应该是容易被重现的,尤其是对于交互文档和文章中的内容。所以记笔记中,要记录环境如何安装,数据如何准备,程序如何运行,结果如何验证等。
    • 持续更新:好的笔记应该持续的更新出来的。

    大家或许都看过廖雪峰老师的网站,写的很好懂。就像下图中所说“中文,免费,零起点,完整示例”。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Exq5uDal-1578559407567)(images/1557704516822.png)]

    笔记的安全性

    既然要分享,笔记的安全性非常重要。不同的笔记也有不同的发布范围。

    • Internet:
      • 公开。没有安全性限制,可以发布到internet上,让所有人访问。一般包括一些wiki,blog,开源代码等。
      • 私有。信息是私有的,但可以授权任意的人员来访问。个人的一些文章,代码,但并不想公开的,而且不含有公司的敏感信息。
    • 公司/部门:仅在公司/部门内部网络才可以访问。有些信息在公司或部门内部是公开的。比如:公司流程,部门policy等。
    • 项目:信息在项目组内部是公开的,可以授权项目外的同事来访问。比如:项目开发设计文档,源代码等。
    • 私有:信息是私有的,但可以授权公司的同事或者互联网上的朋友来访问。比如:个人的一些资料,文档,代码等。

    工具

    任何工具的流行,离不开需求,也离不开合适的环境。

    历史

    个人而言,使用的工具经历了以下的过程。

    • 原始社会:文本文件,word,excel文件
    • 工业时代:evernote, onenote, 有道云笔记
    • 信息时代:zeppelin,jupyter notebook + 思维导图
    • 互联时代: github(pages, wiki) + typora(markdown) + pandoc …

    以上的这些时代的划分,纯粹是个人杜撰。

    以上这些工具,我们都会混合使用,没有一种工具可以解决所有的问题。

    原始社会:文本文件,word,excel文件

    大家都是使用这些工具开始的,主要缺点是文件分散在计算机的各处,时间长了,放在哪里都忘了,查找起来很不方便。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7pS1CBmI-1578559407568)(images/ximg_5b6e4770e6897.jpg)]

    工业时代:evernote, onenote, 有道云笔记

    采用这些强大的工具,我们可以编写出如下图一样精美的笔记。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zRvY9W68-1578559407569)(images/CNHome_Image1_v2.png)]

    记不得从何时开始,用上了evernote,身边的很多朋友也在用onenote。用上这些工具,笔记集中管理,可以多级导航,搜索起来也很方便,应该说效率大大提高 。后来又开始使用有道云笔记,和evernote比起来,它可以编写markdown,笔记分级方便方便,但全文检索能力又不如evernote。

    信息时代:zeppelin,jupyter notebook + 思维导图

    虽然evernote,onenote等工具很强大,但无法执行程序代码。由此,zeppelin,jupyter notebook等工具孕育而生。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPMc6cUc-1578559407569)(images/jupyterpreview.png)]

    思维导图

    思维导图,则另辟蹊径,是表达发散性思维的有效图形思维工具。它运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像、颜色等建立记忆链接。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DTTnKxYZ-1578559407570)(images/1557381669838.png)]

    互联时代: github pages+ typora(markdown) + jupyter notebook + pandoc …

    面临的问题:

    • 工具的强大,造成笔记太多,如何使笔记更有价值?
    • 学习时记笔记,开发时写文档,需要展示时写ppt,如何用统一的方式来记录和分享呢?

    分享

    上面两个问题的答案或许是分享。知识的根本目的和价值是分享。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9SY1yzEb-1578559407571)(images/pic1_0.png)]

    当需要分享知识的时候,往往会花上心思,这使得知识更易于理解,更加有价值。

    整个知识分享的流程如下:

    Code Editor
    Git
    Information
    Markdown Editor: Typora
    Document
    Article
    Interactive Doc
    Notebook Editor: Jupyter
    code
    ppt, pdf, word, html
    Github Pages

    下面自右向左来详细分析上图中的内容。首先是GitHub Pages。

    上面的图其实也是用一种代码(mermaid)也写成的。

    GitHub Pages

    GitHub Pages是一个用来展现GitHub中个人,组织或者项目的静态的网站,使用它可以把知识分享到整个互联网。如果GitHub Pages部署到Github Enterprise,则是在公司范围内分享的。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6boA25en-1578559407571)(images/0.jpg)]

    使用GitHub Pages的网站很多,效果很不错,不乏一些大公司,下面是一些例子。

    Projects using GitHub Pages

    Open source organizations using GitHub Pages

    Markdown Editer: Typora

    非常好的Markdown编辑器。之前用过的Markdown工具不少,包括有道云笔记,visual stuido code,但个人非常喜欢Typora。其中主要的原因有两点 :

    • 在一个界面完成编辑和展现,和word比较类似。大多数其他的工具有两个窗口,一个是markdown编辑窗口,一个是展现窗口,这样无疑就要占用很大屏幕区域。由于我们写笔记时,可能会参照其他的资料,这些资料也会占据一块屏幕区域,Typora这种方式,大大节省了区域的占用。下图中,可以看出有道云笔记的空间实在有些憋屈。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63J0RsuN-1578559407572)(images/1557737550595.png)]

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0gBdjuX-1578559407572)(images/1557737768652.png)]

    • 添加图片的效率很高。在Typora中可以进行如下设置,当copy图片的时候,自动拷贝到一个指定目录,真的太方便了。很多工具没有注意到这一点,非常遗憾。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQzxIITl-1578559407573)(images/1557737839389.png)]

    Markdown

    Markdown是一种轻量级标记语言,让写作者专注于写作而不用关注样式,而且可以很容易把Markdown转化成其他的文件格式,比如:html, pdf, word, ppt等等。下面是markdown语言和展现的对应关系,相信大家几分钟就能掌握。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FXaxTeiT-1578559407573)(images/markdown.png)]

    Markdown vs. Word

    下面把Markdown来比较一下,我们最常用的word。

    • 内容与形式分离 vs 所见即所得(内容与形式融合)
      • 专注内容书写:Markdown 胜
      • 调整排版:Markdown 胜
      • 文档发布和阅读:Markdown 胜
    • 源码输入 vs 所见即所得
      • 严谨性:Markdown 胜
    • 功能:Word 胜
      • 图片支持: Word 略胜
      • 表格支持: Word 胜
      • 显示和上手难度: Word 胜
    • 书写流畅性: Markdown 胜

    自从用上了markdown,再也不看不上word了。

    Pandoc

    Pandoc是一个标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。比如:下面的脚本,可以把markdown转化成html格式的ppt。

    pandoc -t F -s take_notes_ppt.md \
           -o take_notes_ppt.html \
           -V revealjs-url=https://revealjs.com \
           -V theme=moon
    

    工具的要求

    并不是对单一工具的,而是对于所用的工具集来说的。

    • 简单易用
    • 多种格式: 信息,文档,表格,代码,图表都能支持。
    • 编辑方便。不方便的例子有jupyter notebook添加图片麻烦。由于jupyter notebook是web站点,添加图片时不得不手工上传到网站上,然后再在notebook代码中定义,这样就使得记笔记的过程总是被中断。
    • 快速检索。不好的例子有有道云笔记的搜索功能。有道云笔记每次搜索时的目录是当前目录,而不是最根层的目录。我的一般工作的场景是,有道云笔记打开,定位到某个笔记本,随时在上面做一些记录,当工作中,发现了某个问题,而且记得笔记本中记录过,这时回到有道云笔记,去搜索一下,这时想搜索的范围一般是所有文档,而不是当前目录或当前文档。
    • 易于分享。支持分享到项目,部门,公司或互联网。根据知识的安全要求,可以把知识可以在不同层次,但分享的方式都相同。

    达到以上几点,就是一个很好的工具集组合了,显然基于github pages的方案可以完美的满足上面的所有要求。除此以外,如果能够对笔记拥有完全的控制权,那就更好了。完全控制权表现在:

    • 版本控制。能够看到笔记的修改历史,可以多人协同编辑。
    • 能够选择发布的平台。比如,目前采用Github Pages进行发布,在未来,可以很容易发布到其它更好的平台。
    • 能够方便的迁移所有的笔记。而用onenote,有道云笔记,evernote等平台,导入导出总有或多或少的限制或者不便。

    毫无疑问,基于github pages的方案也先天支持对笔记的完全控制,它带来的是自由,或许唯一的问题是,它有一点儿复杂了。

    总结

    无论使用任何工具,无论如何记笔记,只要让更多知识得到更好的分享,就能实现知识的更大价值。

    参考

    展开全文
  • ES6个人笔记记录——Proxy5

    万次阅读 2020-05-08 14:29:15
    虽然Proxy可以代理针对目标对象的访问,但他不是目标对象的透明代理,即不任何拦截的情况下也无法保证与目标对象的行为一致。主要原因就是在Proxy代理的情况下,目标对象内部的this关键字会指向Proxy代理 const ...

    this问题

    虽然Proxy可以代理针对目标对象的访问,但他不是目标对象的透明代理,即不做任何拦截的情况下也无法保证与目标对象的行为一致。主要原因就是在Proxy代理的情况下,目标对象内部的this关键字会指向Proxy代理

    const target = {
    	m : function(){
    		console.log(this === proxy);
    	}
    };
    
    const handler = {};
    
    const proxy = new Proxy(target,handler);
    
    target.m();
    proxy.m();
    

    由于this指向的变化导致Proxy无法代理目标对象

    console.log('----------------------eg2------------------------');
    const _name = new WeakMap();
    
    class person{
    	constructor(name){
    		_name.set(this,name);
    	}
    	get name(){
    		return _name.get(this);
    	}
    }
    
    const jane = new person('jane');
    console.log(jane.name);
    const proxy1 = new Proxy({},jane);
    console.log(proxy.name);
    

    目标对象jane的name属性实际保存在外部Weakmap对象_name上面,通过this键区分。

    由于通过proxy.name访问时,this指向proxy,导致无法取值,所以返回undefined

    某些原生对象的内部属性只有通过正确this才能获取,所以Proxy也无法代理原生对象属性

    Error
    const target = new Date();
    const handler = {};
    const proxy = new Proxy(target,handler);
    proxy.getDate(); 
    
    const target2 = new Date();
    const handler1 = {
    	get(target,prop){
    		if(prop === 'getDate'){
    			return target.getDate.bind(target);
    		}
    		return Reflect.get(target,prop);
    	}
    };
    
    const proxy2 = new Proxy(target2,handler1);
    console.log(proxy2.getDate());
    

    适合做Web服务的客户端,也可以来实现数据库的ORM层

    展开全文
  • python学习笔记7.7-日志记录模块logging

    万次阅读 2018-09-16 22:49:22
    本文主要介绍在python中如何使用logging模块记录日志。 1. 如何记录日志 我想对于程序员来说,记录日志的重要性不言而喻,各种bug的调试都离不开日志信息的参考,但是如何记录日志以及该记录一些什么信息却不是...

    段子里说,使用日志的程序员鄙视使用print记录信息的程序员,所以作为一个合格的程序员,合理的记录日志实数非常必要的。本文主要介绍在python中如何使用logging模块记录日志。

    1. 如何记录日志

    我想对于程序员来说,记录日志的重要性不言而喻,各种bug的调试都离不开日志信息的参考,但是如何记录日志以及该记录一些什么信息却不是轻而易举就能掌握的。对于如何使用日志,网络大神已经给出了很好的答案。

    • 不应该自己写log,应该熟练的使用编程语言中对应的日志记录的模块。
    • 应该将log信息对应到适当的级别,有一下经验可以遵循:

      • TRACE level: 如果使用在生产环境中,这是一个代码异味(code smell)。它可以用于开发过程中追踪bug,但不要提交到你的版本控制系统
      • DEBUG level: 把一切东西都记录在这里。这在debug过程中最常用到。我主张在进入生产阶段前减少debug语句的数量,只留下最有意义的部分,在调试(troubleshooting)的时候激活。
      • INFO level: 把用户行为(user-driven)和系统的特定行为(例如计划任务…)
      • NOTICE level: 这是生产环境中使用的级别。把一切不认为是错误的,可以记录的事件都log起来
      • WARN level: 记录在这个级别的事件都有可能成为一个error。例如,一次调用数据库使用的时间超过了预设时间,或者内存缓存即将到达容量上限。这可以让你适当地发出警报,或者在调试时更好地理解系统在failure之前做了些什么
      • ERROR level: 把每一个错误条件都记录在这。例如API调用返回了错误,或是内部错误条件
      • FATAL level: 末日来了。它极少被用到,在实际程序中也不应该出现多少。在这个级别上进行log意味着程序要结束了。例如一个网络守护进程无法bind到socket上,那么它唯一能做的就只有log到这里,然后退出运行。
    • 应该写有意义的log,每一个log都应该对应有其价值

    • 日志信息最好是使用英语,并且合理的使用一些公认的简称或者是代码
    • 日志格式比较重要,最好是遵循日志库提供的标准格式
    • 记录日志的时候可以多考虑阅读者
    • 日志的功能不仅在于调试,在审查、建档、统计等功能中也用的比较多

    2. logging模块简介

    logging是python内置的一个标准模块,主要用于输出或者保存程序运行日志,它有以下优点:
    - 可以设置输出日志的等级、日志保存路径、日志文件回滚
    - 不仅可以控制台输出,还可以文件保存,不仅可以在代码中配置,还支持从配置文件中直接加载日志的配置
    与print()函数相比,logging有很多优势,如果还在用print()记录日志,从现在起,习惯使用logging吧。

    3. logging的等级

    logging中包含了6个等级,分别是:(log是一个logging实例)

    log等级 使用范围 函数 备注
    FATAL 致命错误 log.fatal
    CRITICAL 特别糟糕的事情 log.critical 如内存耗尽、磁盘空间为空,一般很少使用
    ERROR 发生错误时 log.error 如 IO操作失败或者连接问题
    WARNING 发生很重要的事件,但是并不是错误时 log.warning 如用户登录密码错误
    INFO 处理请求或者状态变化等日常事务 log.info
    DEBUG 调试过程中使用DEBUG等级 log.debug 如 算法中每个循环的中间状态

    在这些等级中,由下向上严重性依次递增,也就是DEBUG是最轻的,FATAL是最严重的。每一个等级都对应于一个函数用于记录对应等级的日志。当设置了输出日志的等级后,只会输出或者保存当前等级以及更严重等级的信息,这样可以在不同的环境中输出不用的调试信息。例如设置了日志等级是DEBUG,那么所有的日志都会输出;如果设置为ERROR,那么就只有ERROR,CRITICAL,FATAL这三个等级会被保存或者输出。

    4. logging的使用

    logging的使用流程是:1. 配置logging,包括是在控制台输出还是保存在文件、输出内容、输出格式等(可以在代码中直接配置,也可以在配置中加载配置)2.初始化一个日志类 3. 使用不同的级别日志函数记录日志

    4.1 基本使用:在控制台输出日志信息

    logging的基本使用是在控制台中,使用例程:

    import logging
    # config the logging
    logging.basicConfig(level=logging.DEBUG, format='%(lineno)d - %(asctime)s - %(levelname)s - %(message)s')
    # create a logging object
    log = logging.getLogger(__name__)
    
    # using logging function to log 
    log.info('start logging')
    log.debug('this is a debug')
    log.warning('just a warning')
    log.error('here is a error')
    log.critical('here is a critical error')
    log.fatal(' big bug')

    因为设置的level是DEBUG,所以所有的信息都会打印输出:

    12 - 2018-09-16 21:05:38,837 - INFO - start logging
    13 - 2018-09-16 21:05:38,838 - DEBUG - this is a debug
    14 - 2018-09-16 21:05:38,839 - WARNING - just a warning
    15 - 2018-09-16 21:05:38,840 - ERROR - here is a error
    16 - 2018-09-16 21:05:38,841 - CRITICAL - here is a critical error
    17 - 2018-09-16 21:05:38,842 - CRITICAL -  big bug

    在logging.basicconfig中把level设置为ERROR,输出为:

    15 - 2018-09-16 21:54:12,820 - ERROR - here is a error
    16 - 2018-09-16 21:54:12,821 - CRITICAL - here is a critical error
    17 - 2018-09-16 21:54:12,821 - CRITICAL -  big bug

    这个例子就验证了前面所说的:当设置了输出日志的等级后,只会输出或者保存当前等级以及更严重等级的信息,这样可以在不同的环境中输出不用的调试信息。例如设置了日志等级是DEBUG,那么所有的日志都会输出;如果设置为ERROR,那么就只有ERROR,CRITICAL,FATAL这三个等级会被保存或者输出。

    • 下面说一下logging.basicConfig函数参数的含义:
    参数名 作用 备注
    filename 指定日志文件名
    filemode 和file函数意义相同,指定日志文件的打开模式,’w’或者’a’;
    format 指定输出的格式和内容
    datefmt 指定时间格式,同time.strftime()
    level 设置日志级别 默认为logging.WARNNING
    stream 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件 默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略;

    - format参数的选择

    参数名 参数意义 备注
    %(levelno)s 打印日志级别的数值
    %(levelname)s 打印日志级别的名称
    %(pathname)s 打印当前执行程序的路径 其实就是sys.argv[0]
    %(filename)s 打印当前执行程序名
    %(funcName)s 打印日志的当前函数
    %(lineno)d 打印日志的当前行号
    %(asctime)s 打印日志的时间
    %(thread)d 打印线程ID
    %(threadName)s 打印线程名称
    %(process)d 打印进程ID
    %(message)s 打印日志信息

    在实例中:format='%(lineno)d - %(asctime)s - %(levelname)s - %(message)s' 就是打印当前运行行,时间,级别,日志信息

    4.2 将日志保存在文件

    将日志保存在文件一般有三种形式:只保存在文件、控制台显示同时保存在文件、日志回滚

    4.2.1 只保存在文件

    这种方式的使用过程是:设置logging并创建一个FileHandler,并对输出消息的格式进行设置,将其添加到logger,然后将日志写入到指定的文件中。

    import logging
    # Instantiate a logging
    logger = logging.getLogger(__name__)
    # set level
    logger.setLevel(level = logging.INFO)
    # use FileHander to set file
    handler = logging.FileHandler("log.txt")
    # set level
    handler.setLevel(logging.INFO)
    # set format
    formatter = logging.Formatter('%(lineno)d - %(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    
    logger.addHandler(handler)
    
    logger.info("this is a info")
    logger.debug("just debug")
    logger.warning("this ia a warning")
    logger.error("sorry, this is a bug")

    查看txt中的内容:

    16 - 2018-09-16 22:19:31,449 - __main__ - INFO - this is a info
    18 - 2018-09-16 22:19:31,449 - __main__ - WARNING - this ia a warning
    19 - 2018-09-16 22:19:31,449 - __main__ - ERROR - sorry, this is a bug

    因为LEVEL设置为INFO所以debug的日志没有记录(debug级别比info更低)
    - NOTES
    代码中有两个设置level的地方,logger.setLevel(level = logging.INFO)是设置整个logging的level,handler.setLevel(logging.INFO)是设置打印到文件的level,实际工作中只会保存两个level中级别最严格的那个

    4.2.2 控制台输出同时文件保存

    import logging
    logger = logging.getLogger(__name__)
    logger.setLevel(level = logging.INFO)
    handler = logging.FileHandler("log.txt")
    handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    
    console = logging.StreamHandler()
    console.setLevel(logging.ERROR)
    
    # TWO kind way must be added
    logger.addHandler(handler)
    logger.addHandler(console)
    
    logger.info("this is a info")
    logger.debug("just debug")
    logger.warning("this ia a warning")
    logger.error("sorry, this is a bug")

    控制台输出:

    sorry, this is a bug

    txt文件中的内容:

    2018-09-16 22:30:30,913 - __main__ - INFO - this is a info
    2018-09-16 22:30:30,914 - __main__ - WARNING - this ia a warning
    2018-09-16 22:30:30,914 - __main__ - ERROR - sorry, this is a bug

    因为控制台和文件的level设置的不一样,所以日志信息不一样
    - notes
    也就是说,保存文件个控制台都可以单独设置level,实际工作中以单独了level和全局level中最严格的那个level为准

    4.2.3 日志回滚

    将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会越来越庞大,进而影响系统的性能。因此,有必要对日志文件按某种条件进行切分,要切分日志文件,这种方式就是日志回滚。
    分割日志的触发条件:大小、日期,或者大小加上日期。说是切分,实际上是,当一个日志文件达到触发条件后,对日志文件进行重命名,之后再新建原来名称的日志文件(此时就是空文件了),新产生的日志就写入新的日志文件。
    为啥叫回滚呢?当分割的日志文件达到指定数目的上限个数时,最老的日志文件就会被删除。
    logging模块中使用RotatingFileHandler,可以实现日志回滚。

    import logging
    from logging.handlers import RotatingFileHandler
    logger = logging.getLogger(__name__)
    logger.setLevel(level = logging.INFO)
    #定义一个RotatingFileHandler,最多备份3个日志文件,每个日志文件最大1K
    rHandler = RotatingFileHandler("log.txt",maxBytes = 1*512,backupCount = 3)
    rHandler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    rHandler.setFormatter(formatter)
    
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    console.setFormatter(formatter)
    
    logger.addHandler(rHandler)
    logger.addHandler(console)
    
    logger.info("this is a info")
    logger.debug("just debug")
    logger.warning("this ia a warning")
    logger.error("sorry, this is a bug")

    多运行几次,就看到产生了很多txt文件,但最多三个txt日志文件

    -a----        2018/9/16     22:40            453 log.txt
    -a----        2018/9/16     22:39            512 log.txt.1

    4.2.4 捕获异常

    logging还可以用来捕获python异常,

    import logging
    logger = logging.getLogger(__name__)
    logger.setLevel(level = logging.INFO)
    handler = logging.FileHandler("log.txt")
    handler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    
    logger.addHandler(handler)
    logger.addHandler(console)
    
    logger.info("this is a info")
    logger.debug("just debug")
    logger.warning("this ia a warning")
    logger.error("sorry, this is a bug")
    
    try:
        open("a.txt","rb")
    except (SystemExit,KeyboardInterrupt):
        raise
    except Exception:
        logger.error(" ",exc_info = True)

    txt文件中就可以看到:

    Traceback (most recent call last):
      File "g:\myfiles\home\Python\HBN\get_ibfo.py", line 21, in <module>
        open("a.txt","rb")
    FileNotFoundError: [Errno 2] No such file or directory: 'a.txt'

    后续更新在不用的模块中同时使用log以及怎么通过配置文件加载logging的配置

    展开全文
  • 从印象笔记迁移到为知笔记记录

    千次阅读 2014-09-27 00:46:31
    从印象笔记迁回到为知笔记,记录如下: a) 印象笔记里每个笔记都有个很大的框很烦,也正是这个原因(之一)才迁移到为知笔记 b) 印象笔记里貌似没有显示所有打开的标签的功能,如果修改两个笔记比较麻烦,来回...
  • 5R笔记技术,旨在为帮助学生有效地做笔记。康奈尔笔记系统把一页纸分成了三部分:左边记录右边线索和下方总结。 注意事项:这个工作不要在做笔记的时候,而是在上完课之后马上回顾,然后把要点和关键词都写到左边...
  • ES6个人笔记记录——Set数据结构

    万次阅读 2020-05-08 13:39:15
    去除数组中的重复元素 因为向Setj加入值不会发生类型转换 所以5和'5'是l两个不同的值 Set内部判断是否相等是采用"Same-value equality" 类似于精确相等运算符"===" 主要的区别是NaN等于自身,而精确相等运算符认为...
  • 编程容易产生挫折,即使作为一种业余爱好也可能是这样。建立一个网页,手机APP或桌面...这就是为什么找来了这些比较好用的做笔记工具。可以看看是否有你在用的。同样也欢迎大家在留言区分享你最喜爱的笔记软件! 1. ...
  • 学习Python的做笔记神器——Jupyter Notebook

    万次阅读 多人点赞 2018-03-16 09:38:49
    学习Python的做笔记神器——Jupyter Notebook 给想学好Python的同学们安利一波,Jupyter Notebook是学习Python最好的做笔记环境,...将介绍Jupyter Notebook的主要特点,了解为什么它能成为人们创造优美的可交互...
  • 数学符号和英文缩写能快速一些简洁而又清晰的笔记;再配合上康奈尔笔记法,让你的学习速度和效率大幅提高,提高总结、思考等能力。 笔记符号 将笔记符号分为 行内标记、页边距标 两种 行内标记 ...
  • 做笔记软件

    千次阅读 2014-03-29 09:36:19
    做笔记软件  找最好的笔记软件:三强篇(EverNote、Mybase、Surfulater)  [转载请保留]  版本1.0 编译xbeta/善用佳软 出自 http://blog.sina.com.cn/u/46dac66f01000b57   寻找最好的笔记软件...
  • NSGA2学习笔记 Pareto-最优解的概念 1:解A优于解B(解A强帕累托支配解B) 假设现在有两个目标函数,解A对应的目标函数值都比解B对应的目标函数值好,则称解A比解B优越,也可以叫做解A强帕累托支配解B,举个例子,...
  • Spring 学习笔记

    万次阅读 多人点赞 2019-01-07 10:38:47
    好记忆不如烂笔头, 能下点什么, 就下点什么, 方便后期的巩固 Spring介绍 Spring 是一个开源框架,是一个分层的 JavaEE 一站式框架。 所谓一站式框架是指 Spring 有 JavaEE 开发的每一层解决方案。 WEB层:...
  • 程序员怎样记笔记

    千次阅读 2008-04-28 20:28:00
    从今天起,我将在一家培训机构为期5个月的JAVA培训。 开学第一天,主要学习UNIX开发环境,我想一下笔记。希望各位在记笔记方面给我宝贵建议。谢谢!
  • 你用什么软件做笔记

    千次阅读 2019-07-17 08:53:00
    是的,这是一个文本编辑器,而不是一个笔记应用程序,但它当然也可以用于记笔记:每个笔记作为一个文本文件,每个代码片段在一个单独的语言文件中。 Sublime Text的原生功能非常适合 提高整体生产力 ,分割多个编辑...
  • Java笔记-Servlet相关记录

    千次阅读 多人点赞 2020-01-29 11:12:27
    主要用于交互式浏览和生成数据,生成动态Web内容。 下面是关于Servlet的生命周期: Servlet的调用要要经过两个过滤器 下面是关于转发和重定向 Forward:客户端和浏览器只发出一次请求,Servlet、HTML、...
  • 本文由庆哥小白授权投稿作者公众号:「一个自学的程序员」关于记笔记的重要性,暂且不谈,这次主要说说我在学习的过程中是如何记笔记的!本文共有 2908 字如果觉得页面很长...
  • 《李元芳履职》 读书笔记

    千次阅读 2019-11-29 10:53:53
    最近看完了 《李元芳履职》 这本书,书中通过技术骨干李元芳成长为中层管理人员为路线,以工作中各种实际问题为切入点,深入浅出的讲解了技术人员转变为中层管理需要面临的问题和学习的知识,里面提到的问题都是...
  • 一如既往选择word 做笔记 以前用有道云笔记,可是这次有道更新了之后,便不能脱机使用了,一定要登录账号和密码。。。所以放弃有道; 看见有些朋友用系统自带的备忘录,感觉也可以,但是却不能移植,索引放弃备忘录...
  • 读书时如何读书笔记

    千次阅读 2016-10-08 23:03:06
    作者:阿何 ... 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 ...作为一枚笔记狂人,本人对一切关于如何...在超过10年记笔记的生涯中,我自己构建了一套记笔记、管理笔记的方法体系。在它的帮助下,我现在几
  • 从阅读中记笔记的8个技巧

    千次阅读 2018-11-29 14:36:29
    4、等等做笔记 5、避免使用荧光笔 6、考虑手工记笔记 7、小心输入您的笔记 8、使用信息管理应用程序和软件 研究生学习需要大量的阅读。所有学科都是如此。你怎么记得你读过的?如果没有用于记录和调用您获得...
  • 1、开源圆桌会议参与人员: 2、开源互联网公司 关于开源,2019年是中国开源爆发的起始元年。...也的比较早,比如自动驾驶阿波罗人工智能等等,大概有1000个左右,参与贡献开发者有1W人+了,2019年成...
  • 康奈尔大学做笔记方式

    千次阅读 2013-07-28 14:51:30
    5R笔记法,又叫做康乃笔记法,是用产生这种笔记法的大学校名命名的。这一方法几乎适用于一切讲授或阅读课,特别是对于听课笔记,5R笔记法应是最佳首选。这种方法是与学,思考与运用相结合的有效方法。具体包括以下...
  • 超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    万次阅读 多人点赞 2021-03-26 11:11:21
    上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。
  • 学生时代的读书笔记主要是便于理解和梳理,应付考试; 工作以后不再有考试了,读书的目的不再是记忆然后考试,而是学习->实践。 因此,工作以后的读书笔记应当以“实践”为中心,尤其是提炼你阅读完书本之后会立马...
  • 工作笔记:TrueCrypt编译记录

    千次阅读 2009-09-17 11:36:00
    工作笔记:TrueCrypt编译记录TrueCrypt的最新版本6.2可以从官方网站上下载,我从这里下载了一个6.1的http://freedos.pri.ee/truecrypt/在TrueCrypt官方网站上很多旧版本都没了,这里却很全。首先,WINDDK7与VS2008/...
  • 此时若有效率地记笔记,可以增进对阅读内容的了解,并于撰写论文时减少时间耗费与挫折感。以下为记笔记的几个重点: 1. 确认哪种类型的概念是笔记重点 先列出有关研究的问题,再进行针对细节的研究。在阅读时...
  • 准备使用 ScribeFire + CSDN 记笔记

    千次阅读 2009-02-27 23:20:00
    一直想找一个随时快速记录想法的方式,大概的场景是: 上网或工作中脑中闪过有价值的想法,需要迅速捕捉记录下只言片语 ...然后考察了一下googleDoc以及Gmail做笔记的方式。前者看着挺整洁大方,但还是有些慢,而且不
  • 这是自己最近看到的《匠人精神》这本书的读后感,只是稍稍了个总结,但是感觉最为关键的是要自己在生活和工作中进行及时的反思。  Note1:匠人须知三十条:  1. 进入工作场所之前,必须先学会和人打...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 189,757
精华内容 75,902
关键字:

做笔记主要记什么