在Windows下的Python 2.7.5中,当
我的
最后,我的主文件
FileHandler
处于'w'
模式(在写入之前截断文件)时,处理器不仅会写入最后一行。而当处于'a'
模式时则一切正常。我的
logging.conf
文件:[loggers]
keys=root
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=NOTSET
handlers=fileHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('generator.log', 'a', 'utf8', 0)
[formatter_simpleFormatter]
format=[ %(asctime)s ] [ %(name)s ] [ %(levelname)-5s ] - %(message)s
datefmt=
我的 oracle.py
文件:
__author__ = 'wbar'
import cx_Oracle
from contextlib import closing
import logging
class Connector(object):
__connection__ = None
__user_name__ = None
__password__ = None
__tns_name__ = None
__logger__ = None
def get_connection(self, auto_connect=True):
if auto_connect and not self.__connection__:
self.__logger__.info(u'Connecting into Oracle: %s@%s', self.__user_name__, self.__tns_name__)
self.__connection__ = cx_Oracle.connect(
u'%s/%s@%s' % (self.__user_name__, self.__password__, self.__tns_name__))
return self.__connection__
def __init__(self, user_name, password, tns_name):
self.__user_name__ = user_name
self.__password__ = password
self.__tns_name__ = tns_name
self.__logger__ = logging.getLogger('OracleConnector')
self.__logger__.addHandler(logging.NullHandler())
def __del__(self):
self.close_connection()
def close_connection(self):
connection = self.get_connection(auto_connect=False)
if connection:
self.__logger__.info(u'Closing connection with Oracle: %s@%s', self.__user_name__, self.__tns_name__)
connection.close()
def execute(self, sql):
with closing(self.get_connection().cursor()) as cursor:
self.__logger__.debug(u'Executing: %s', sql)
cursor.execute(sql)
return cursor.fetchall()
最后,我的主文件
generator.py
如下:__author__ = 'wbar'
import logging
import logging.config
logging.FileHandler
logging.config.fileConfig('logging.conf')
from oracle import Connector as OracleConnector
DATABASE = OracleConnector(user_name=u'foo', password=u'bar', tns_name=u'db_local')
for line in DATABASE.execute('select * from dual'):
print(line[0])
logger = logging.getLogger('root')
logger.debug('DEBUG')
logger.info('INFO')
logger.error('ERROR')
当模式为'a'
时,日志文件的样式如下:
[ 2013-11-13 17:15:25,608 ] [ OracleConnector ] [ INFO ] - Connecting into Oracle: pms_test@db_impaq_local
[ 2013-11-13 17:15:25,727 ] [ OracleConnector ] [ DEBUG ] - Executing: select * from dual
[ 2013-11-13 17:15:25,730 ] [ root ] [ DEBUG ] - DEBUG
[ 2013-11-13 17:15:25,730 ] [ root ] [ INFO ] - INFO
[ 2013-11-13 17:15:25,730 ] [ root ] [ ERROR ] - ERROR
[ 2013-11-13 17:15:25,734 ] [ OracleConnector ] [ INFO ] - Closing connection with Oracle: pms_test@db_impaq_local
当模式为'w'
时,日志文件看起来像:
[ 2013-11-13 17:06:24,239 ] [ OracleConnector ] [ INFO ] - Closing connection with Oracle: pms_test@db_impaq_local
FileHandler
时它只会打开一次文件吗? - WBAR