>>>http://blog.csdn.net/naiveloafer/article/details/7630673
二、通过配置文件来配置输出
配置文件:
- <span style="font-size: 18px;">#Configuration for log output
- #Naiveloafer
- #2012-06-04
- [loggers]
- keys=root,xzs
- [handlers]
- keys=consoleHandler,fileHandler,rotatingFileHandler
- [formatters]
- keys=simpleFmt
- [logger_root]
- level=DEBUG
- #handlers=consoleHandler
- #handlers=fileHandler
- handlers=rotatingFileHandler
- [logger_xzs]
- level=DEBUG
- handlers=rotatingFileHandler
- qualname=xzs
- propagate=0
- [handler_consoleHandler]
- class=StreamHandler
- level=DEBUG
- formatter=simpleFmt
- args=(sys.stdout,)
- [handler_fileHandler]
- class=FileHandler
- level=DEBUG
- formatter=simpleFmt
- args=("../log/p2pplayer.log", "a")
- [handler_rotatingFileHandler]
- class=handlers.RotatingFileHandler
- level=DEBUG
- formatter=simpleFmt
- args=("../log/p2pplayer.log", "a", 20*1024*1024, 10)
- [formatter_simpleFmt]
- format=%(asctime)s - %(name)s - %(levelname)s - %(message)s - [%(filename)s:%(lineno)s]
- datefmt=</span>
#Configuration for log output
#Naiveloafer
#2012-06-04
[loggers]
keys=root,xzs
[handlers]
keys=consoleHandler,fileHandler,rotatingFileHandler
[formatters]
keys=simpleFmt
[logger_root]
level=DEBUG
#handlers=consoleHandler
#handlers=fileHandler
handlers=rotatingFileHandler
[logger_xzs]
level=DEBUG
handlers=rotatingFileHandler
qualname=xzs
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFmt
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFmt
args=("../log/p2pplayer.log", "a")
[handler_rotatingFileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simpleFmt
args=("../log/p2pplayer.log", "a", 20*1024*1024, 10)
[formatter_simpleFmt]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s - [%(filename)s:%(lineno)s]
datefmt=
测试代码:
- <span style="font-size: 18px;">def log_test02():
- import logging
- import logging.config
- CONF_LOG = "../conf/p2pplayer_logging.conf"
- logging.config.fileConfig(CONF_LOG); # 采用配置文件
- logger = logging.getLogger("xzs")
- logger.debug("Hello xzs")
- logger = logging.getLogger()
- logger.info("Hello root")
- if __name__ == "__main__":
- log_test02()</span>
def log_test02():
import logging
import logging.config
CONF_LOG = "../conf/p2pplayer_logging.conf"
logging.config.fileConfig(CONF_LOG); # 采用配置文件
logger = logging.getLogger("xzs")
logger.debug("Hello xzs")
logger = logging.getLogger()
logger.info("Hello root")
if __name__ == "__main__":
log_test02()
输出:
- <span style="font-size: 18px;">2012-06-04 15:28:05,751 - xzs - DEBUG - Hello xzs - [xlog.py:29]
- 2012-06-04 15:28:05,751 - root - INFO - Hello root - [xlog.py:32]</span>
2012-06-04 15:28:05,751 - xzs - DEBUG - Hello xzs - [xlog.py:29]
2012-06-04 15:28:05,751 - root - INFO - Hello root - [xlog.py:32]
具体就不详细说明了,总之是能够运行的,这个文件配置搞了我两天时间。
特别是class=XXXX要注意!!!
关于formatter的配置,采用的是%(<dict key>)s的形式,就是字典的关键字替换。提供的关键字包括:
Format | Description |
---|---|
%(name)s | Name of the logger (logging channel). |
%(levelno)s | Numeric logging level for the message (DEBUG, INFO, WARNING, ERROR, CRITICAL). |
%(levelname)s | Text logging level for the message ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'). |
%(pathname)s | Full pathname of the source file where the logging call was issued (if available). |
%(filename)s | Filename portion of pathname. |
%(module)s | Module (name portion of filename). |
%(funcName)s | Name of function containing the logging call. |
%(lineno)d | Source line number where the logging call was issued (if available). |
%(created)f | Time when the LogRecord was created (as returned by time.time()). |
%(relativeCreated)d | Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded. |
%(asctime)s | Human-readable time when the LogRecord was created. By default this is of the form “2003-07-08 16:49:45,896” (the numbers after the comma are millisecond portion of the time). |
%(msecs)d | Millisecond portion of the time when the LogRecord was created. |
%(thread)d | Thread ID (if available). |
%(threadName)s | Thread name (if available). |
%(process)d | Process ID (if available). |
%(message)s | The logged message, computed as msg % args. |