pythonログ学習


pythonのログgingモジュール学習
1.簡単にログをスクリーンに印刷する
  import logging

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
  :
WARNING:root:This is warning message

デフォルトでは、loggingはログを画面に印刷し、ログレベルはWARNINGです.ログ・レベルのサイズ関係は、CRITICAL>ERROR>WARNING>INFO>DEBUG>NOTSETです.もちろん、ログ・レベルを自分で定義することもできます.
2.loggingでbasicConfig関数はログの出力フォーマットと方式に対して関連する配置をしますimport logging

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='myapp.log',
                filemode='w')
    
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
  ./myapp.log :
Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

logging.basicConfig関数の各パラメータ:filename:ログファイル名filemodeを指定する:file関数と同じ意味で、ログファイルのオープンモードを指定し、'w'または'a'format:出力のフォーマットと内容を指定し、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:印刷ログ情報datefmt:指定時間フォーマット、time.strftime()level:ログレベルを設定し、デフォルトはlogging.WARNINGstream:ログへの出力ストリームを指定し、sysへの出力を指定できます.stderr,sys.stdoutまたはファイル、デフォルトはsysに出力.stderr、streamとfilenameが同時に指定されるとstreamは無視されます
3.ログをファイルと画面に同時に出力するimport logging

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='myapp.log',
                filemode='w')

#################################################################################################
# StreamHandler, INFO , #
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
#################################################################################################

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
  :
root        : INFO     This is info message
root        : WARNING  This is warning message
./myapp.log :
Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

4.loggingのログロールバックimport logging
from logging.handlers import RotatingFileHandler

#################################################################################################
# RotatingFileHandler, 5 , 10M
Rthandler = RotatingFileHandler('myapp.log', maxBytes=10*1024*1024,backupCount=5)
Rthandler.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
Rthandler.setFormatter(formatter)
logging.getLogger('').addHandler(Rthandler)
################################################################################################

上記の例と本例から,loggingにはログ処理のプライマリオブジェクトがあり,他の処理方式はaddHandlerによって追加されていることが分かる.loggingのいくつかのhandle方式は以下の通りです.
 
logging.StreamHandler:ストリームにログが出力されます.sysです.stderr、sys.stdoutまたはファイルlogging.FileHandler:ログをファイルログロールバック方式に出力、実際に使用する場合はRotatingFileHandlerとTimedRotatingFileHandlerloggingを使用する.handlers.BaseRotatingHandlerlogging.handlers.RotatingFileHandlerlogging.handlers.TimedRotatingFileHandlerlogging.handlers.SocketHandler:TCP/IP socketsloggingへのリモート出力ログhandlers.DatagramHandler:UDP socketsloggingへのリモート出力ログhandlers.SMTPHandler:メールアドレスにログをリモート出力logging.handlers.SysLogHandler:sysloggingにログを出力.handlers.NTEventLogHandler:Windows NT/2000/XPにログをリモートで出力するイベントログlogging.handlers.MemoryHandler:メモリにログを出力する作成bufferlogging.handlers.HTTPHandler:「GET」または「POST」でHTTPサーバにリモート出力
 
StreamHandlerとFileHandlerは一般的なログ処理方式であるため、直接loggingモジュールに含め、他の方式はloggingに含める.handlersモジュールでは、上記の他の処理方法の使用についてはpython 2を参照してください.5マニュアル!
5.loggingでconfigモジュール構成ログ#logger.conf
############################################### [loggers]
keys=root,example01,example02
[logger_root]
level=DEBUG
handlers=hand01,hand02
[logger_example01]
handlers=hand01,hand02
qualname=example01
propagate=0
[logger_example02]
handlers=hand01,hand03
qualname=example02
propagate=0
############################################### [handlers]
keys=hand01,hand02,hand03
[handler_hand01]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stderr,)
[handler_hand02]
class=FileHandler
level=DEBUG
formatter=form01
args=('myapp.log', 'a')
[handler_hand03]
class=handlers.RotatingFileHandler
level=INFO
formatter=form02
args=('myapp.log', 'a', 10*1024*1024, 5)
############################################### [formatters]
keys=form01,form02
[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S
[formatter_form02]
format=%(name)-12s: %(levelname)-8s %(message)s
datefmt=

前例3:import logging
import logging.config

logging.config.fileConfig("logger.conf")
logger = logging.getLogger("example01")

logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')

前例4:import logging
import logging.config

logging.config.fileConfig("logger.conf")
logger = logging.getLogger("example02")

logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')

6.loggingはスレッドが安全です
from:http://blog.csdn.net/yatere/article/details/6655445