python开发_logging_日志处理

在很多编程语言中,都会出现日志处理操作,python也不例外...

接下来我们来看看python中的logging模块

'''
    python中,logging模块主要是处理日志的。
    所谓日志,可理解为在软件运行过程中,所记录的的一些运行情况信息
    软件开发人员可以根据自己的需求添加日志,日志可以帮助软件开发人员
    了解软件的运行信息,对软件的维护尤为重要。

    日志级别:

       Level                              When it's used
      DEBUG                         detailed information,typically of interest only when diagnosing problems
      INFO                          confirmation that things are working as expected
      WARNING                       An indication that something unexpected happended,or indicative of some problem in the near future.The software is still working as expected
      ERROR                         Due to a more serious problem,the software has not been able to perform some funciton
      CRITICAL                      A serious error, indication that the program itself may be unable to continue running.

    The default level is WARNING.

    Here is an Example:
    
    import logging
    logging.info('this is an info log!')
    logging.warning('this is a warn log!')

    you can see the result:
    WARNING:root:this is a warn log!

    如果你想看到级别比较低的一些日志,你可以这样做:

    Here is an Example:
    import logging
    logging.basicConfig(filename = 'c:\\test\\hongten.log', level = logging.DEBUG)
    logging.debug('this is a debug log!')
    logging.info('this is an info log!')
    logging.warning('this is a warn log!')

    you can see the result:
    DEBUG:root:this is a debug log!
    INFO:root:this is an info log!
    WARNING:root:this is a warn log!

    如果你想格式化输出日志,你可以这样做:
    
    Here is an Example:
    import logging
    logging.basicConfig(format = '%(levelname)s:%(message)s', level = logging.DEBUG)
    logging.debug('this is a debug log!')
    logging.info('this is an info log!')
    logging.warning('this is a warn log!')

    you can see the result:
    DEBUG:this is a debug log!
    INFO:this is an info log!
    WARNING:this is a warn log!

    下面是LogRecord attributes,在格式化输出日志的时候需要用到:
    Attribute name                     Format                                   Description 
    args                              You shouldn’t need to format              The tuple of arguments merged into msg to produce message.
                                      this yourself.       
    asctime                           %(asctime)s                               时间格式
    created                           %(created)s                               创建时间
    filename                          %(filename)s                              文件名称
    levelname                         %(levelname)s                             日志级别
    levelno                           %(levelno)s                               日志id号
    lineno                            %(lineno)s                                行号
    module                            %(module)s                                模块名称
    mescs                             %(mescs)s                                 Millisecond portion of the time when the LogRecord was created.
    message                           %(message)s                               日志信息
    name                              %(name)s                                  日志名称
    pathname                          %(pathname)s                              文件绝对路径
    process                           %(process)s                               进程id
    processName                       %(processName)s                           进程名称
    relativeCreated                   %(relativeCreated)s                       Time in milliseconds when the LogRecord was created,
                                                                                relative to the time the logging module was loaded.
    thread                            %(thread)s                                线程id
    threadName                        %(threadName)s                            线程名称

'''

以下是我做的demo:

运行效果:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
##################################################
##################################################
##################################################
##################################################
2013-08-26 11:01:58,076 - root - DEBUG - this is a debug log!
2013-08-26 11:01:58,080 - root - INFO - this is an info log!
2013-08-26 11:01:58,085 - root - WARNING - this is a warn log!
2013-08-26 11:01:58,088 - root - ERROR - this is an error log!
2013-08-26 11:01:58,091 - root - CRITICAL - this is a critical log!
>>> 

============================================================

代码部分:

============================================================

  1 #python logging
  2 
  3 #Author  : Hongten
  4 #Mailto  : hongtenzone@foxmail.com
  5 #Blog    : http://www.cnblogs.com/hongten
  6 #QQ      : 648719819
  7 #Create  : 2013-08-26
  8 #Version : 1.0
  9 
 10 import logging
 11 import logging.config
 12 
 13 '''
 14     python中,logging模块主要是处理日志的。
 15     所谓日志,可理解为在软件运行过程中,所记录的的一些运行情况信息
 16     软件开发人员可以根据自己的需求添加日志,日志可以帮助软件开发人员
 17     了解软件的运行信息,对软件的维护尤为重要。
 18 
 19     日志级别:
 20 
 21        Level                              When it's used
 22       DEBUG                         detailed information,typically of interest only when diagnosing problems
 23       INFO                          confirmation that things are working as expected
 24       WARNING                       An indication that something unexpected happended,or indicative of some problem in the near future.The software is still working as expected
 25       ERROR                         Due to a more serious problem,the software has not been able to perform some funciton
 26       CRITICAL                      A serious error, indication that the program itself may be unable to continue running.
 27 
 28     The default level is WARNING.
 29 
 30     Here is an Example:
 31     
 32     import logging
 33     logging.info('this is an info log!')
 34     logging.warning('this is a warn log!')
 35 
 36     you can see the result:
 37     WARNING:root:this is a warn log!
 38 
 39     如果你想看到级别比较低的一些日志,你可以这样做:
 40 
 41     Here is an Example:
 42     import logging
 43     logging.basicConfig(filename = 'c:\\test\\hongten.log', level = logging.DEBUG)
 44     logging.debug('this is a debug log!')
 45     logging.info('this is an info log!')
 46     logging.warning('this is a warn log!')
 47 
 48     you can see the result:
 49     DEBUG:root:this is a debug log!
 50     INFO:root:this is an info log!
 51     WARNING:root:this is a warn log!
 52 
 53     如果你想格式化输出日志,你可以这样做:
 54     
 55     Here is an Example:
 56     import logging
 57     logging.basicConfig(format = '%(levelname)s:%(message)s', level = logging.DEBUG)
 58     logging.debug('this is a debug log!')
 59     logging.info('this is an info log!')
 60     logging.warning('this is a warn log!')
 61 
 62     you can see the result:
 63     DEBUG:this is a debug log!
 64     INFO:this is an info log!
 65     WARNING:this is a warn log!
 66 
 67     下面是LogRecord attributes,在格式化输出日志的时候需要用到:
 68     Attribute name                     Format                                   Description 
 69     args                              You shouldn’t need to format              The tuple of arguments merged into msg to produce message.
 70                                       this yourself.       
 71     asctime                           %(asctime)s                               时间格式
 72     created                           %(created)s                               创建时间
 73     filename                          %(filename)s                              文件名称
 74     levelname                         %(levelname)s                             日志级别
 75     levelno                           %(levelno)s                               日志id号
 76     lineno                            %(lineno)s                                行号
 77     module                            %(module)s                                模块名称
 78     mescs                             %(mescs)s                                 Millisecond portion of the time when the LogRecord was created.
 79     message                           %(message)s                               日志信息
 80     name                              %(name)s                                  日志名称
 81     pathname                          %(pathname)s                              文件绝对路径
 82     process                           %(process)s                               进程id
 83     processName                       %(processName)s                           进程名称
 84     relativeCreated                   %(relativeCreated)s                       Time in milliseconds when the LogRecord was created,
 85                                                                                 relative to the time the logging module was loaded.
 86     thread                            %(thread)s                                线程id
 87     threadName                        %(threadName)s                            线程名称
 88 
 89 
 90 '''
 91 
 92 def test_log1():
 93     '''因为logging的默认级别是:WARNING
 94     所以,这里只会输出:this is a warn log!'''
 95     logging.warning('this is a warn log!')
 96     logging.info('this is an info log!')
 97 
 98 def test_log_2_file(path):
 99     '''把运行的日志信息记录到指定的日志文件中
100     并且把日志的操作级别设置为:DEBUG模式'''
101     logging.basicConfig(filename = path, level = logging.DEBUG)
102     logging.debug('this is a debug log!')
103     logging.info('this is an info log!')
104     logging.warning('this is a warn log!')
105 
106 def logging_variable_data():
107     '''可变数据的日志'''
108     logging.warning('%s + %s = %s', 3, 4, 3+4)
109 
110 def logging_format():
111     '''格式化日志'''
112     logging.basicConfig(format='%(asctime)s --%(lineno)s -- %(levelname)s:%(message)s', level=logging.DEBUG)
113     logging.debug('This message should appear on the console')
114     logging.info('So should this')
115     logging.warning('And this, too')
116 
117 def logging_from_config():
118     '''
119     c:\\hongten_logging.conf配置文件信息如下:
120     [loggers]
121     keys=root,simpleExample
122 
123     [handlers]
124     keys=consoleHandler
125 
126     [formatters]
127     keys=simpleFormatter
128 
129     [logger_root]
130     level=DEBUG
131     handlers=consoleHandler
132 
133     [logger_simpleExample]
134     level=DEBUG
135     handlers=consoleHandler
136     qualname=simpleExample
137     propagate=0
138 
139     [handler_consoleHandler]
140     class=StreamHandler
141     level=DEBUG
142     formatter=simpleFormatter
143     args=(sys.stdout,)
144 
145     [formatter_simpleFormatter]
146     format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
147     datefmt=
148     '''
149     logging.config.fileConfig('c:\\hongten_logging.conf')
150     logger = logging.getLogger('root')
151     logger.debug('this is a debug log!')
152     logger.info('this is an info log!')
153     logger.warn('this is a warn log!')
154     logger.error('this is an error log!')
155     logger.critical('this is a critical log!')
156 
157 def main():
158     '''在这里,请一个一个的打开测试'''
159     #test_log_2_file('c:\\hongten.log')
160     print('#' * 50)
161     #test_log1()
162     print('#' * 50)
163     #logging_variable_data()
164     print('#' * 50)
165     #logging_format()
166     print('#' * 50)
167     logging_from_config()
168     
169 
170 if __name__ == '__main__':
171     main()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

java9系列(二)docker运行java9

10000
来自专栏老码农专栏

原 荐 用 ActFramework 写一个

63890
来自专栏CodingBlock

Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html

11440
来自专栏云原生架构实践

Jhipster技术栈定制 - 基于UAA的微服务之间安全调用

3个微服务都是通过Jhipster生成。 工程代码生成完之后,根据上一节启动的组件的实际情况,修改微服务配置文件中Eureka和database相关的配置。

1K30
来自专栏Python

将不同级别的logging 日志信息写入不同文件

11900
来自专栏逆向技术

调试器编写第一讲,调试器基本框架

                  调试器编写第一讲,调试器基本框架 今天开始调试器第一讲,调试器的基本框架,我们用过很多调试器,比如 WinDbg,Olly...

33160
来自专栏用户2442861的专栏

[置顶] Python logging模块详解

WARNING:root:warning message ERROR:root:error message CRITICAL:root:critical ...

10820
来自专栏Java Web

使用RESTful风格开发Java Web

14230
来自专栏杨建荣的学习笔记

Java微服务应用测试,走起

从近几年的技术发展来看,行业里提到微服务应用场景越来越多,是时候能够提升目前的业务扩展能力了。相比于传统的EJB,SOA的方案,微服务是一种相对于更加轻量的方案...

9210
来自专栏Java Web

使用RESTful风格开发Java Web

REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,而 HTTP 是一种包...

23550

扫码关注云+社区

领取腾讯云代金券