天天看點

PYTHON LOGGING子產品

PYTHON的日志功能,一開始在python2.4上運作,各種報錯,後來換成python2.7.9。

附上linux python更新過程:

1、下載下傳python安裝包---Python-2.7.9.tar.xz

2、下載下傳完成後到下載下傳目錄下,解壓

  tar -xzvf Python-3.3.0.tgz

3、進入解壓縮後的檔案夾

  cd Python-3.3.0

4、在編譯前先在/usr/local建一個檔案夾python3(作為python的安裝路徑,以免覆寫老的版本)

  mkdir /usr/local/python3  

5、開始編譯安裝

  ./configure --prefix=/usr/local/python3

  make

  make install

6、此時沒有覆寫老版本,再将原來/usr/bin/python連結改為别的名字

  mv /usr/bin/python /usr/bin/python_old2

7、再建立新版本python的連結

  ln -s /usr/local/python3/bin/python3/usr/bin/python

8、這個時候輸入

  python -V      
# -*- coding=gbk -*-
# filename:pythonglog.py

__author__ = 'vincent'

import logging
import logging.config

logging.config.fileConfig("pythonlog.conf")      
# filename:pythonlog.conf
# 定義logger子產品,root是父類,必需存在的,其它的是自定義。
# logging.getLogger(NAME)便相當于向logging子產品注冊了一種日志列印
# name 中用 . 表示 log 的繼承關系
[loggers]
keys=root,main,console

# 定義handler
[handlers]
keys=fileHandler,consoleHandler

# 定義格式化輸出
[formatters]
keys=fmt

#--------------------------------------------------
# 實作上面定義的logger子產品,必需是[logger_xxxx]這樣的形式
#--------------------------------------------------
# [logger_xxxx] logger_子產品名稱
# level     級别,級别有DEBUG、INFO、WARNING、ERROR、CRITICAL
# handlers  處理類,可以有多個,用逗号分開
# qualname  logger名稱,應用程式通過 logging.getLogger擷取。對于不能擷取的名稱,則記錄到root子產品。
# propagate 是否繼承父類的log資訊,0:否 1:是
[logger_root]
level=INFO
handlers=fileHandler

[logger_main]
level=ERROR
handlers=fileHandler
propagate=0
qualname=main

[logger_console]
level=INFO
handlers=consoleHandler
propagate=0
qualname=console

#--------------------------------------------------
# handler
#--------------------------------------------------
# [handler_xxxx]
# class handler類名
# level 日志級别
# formatter,上面定義的formatter
# args handler初始化函數參數

[handler_fileHandler]
class=handlers.RotatingFileHandler
level=INFO
formatter=fmt
args=('python.log', 'a')

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=fmt
args=(sys.stdout,)

#--------------------------------------------------
# 日志格式
#--------------------------------------------------
# %(asctime)s       年-月-日 時-分-秒,毫秒 2013-04-26 20:10:43,745
# %(filename)s      檔案名,不含目錄
# %(pathname)s      目錄名,完整路徑
# %(funcName)s      函數名
# %(levelname)s     級别名
# %(lineno)d        行号
# %(module)s        子產品名
# %(message)s       消息體
# %(name)s          日志子產品名
# %(process)d       程序id
# %(processName)s   程序名
# %(thread)d        線程id
# %(threadName)s    線程名

[formatter_fmt]
format=[%(asctime)s F=%(filename)s L=%(lineno)d]    [%(message)s]
datefmt=%Y/%m/%d %H:%M:%S
class=logging.Formatter      

子產品測試:

__author__ = 'vincent'

import os
import sys

import logging
import pythonlog

console=logging.getLogger("console")
console.info("THIS IS LOGGER INFO!")      

定義了兩個日志句柄,一個main,輸出日志資訊到檔案python.log,另一個console,輸出日志資訊到螢幕

心有猛虎,細嗅薔薇