Here is my complete model code for a sqlite logging handler. This works the
first time the program is run, and after that I get an error:
<class 'sqlite3.ProgrammingError'> Cannot operate on a closed database.
*model mylogging.py:*
import logging
import logging.handlers
class AppHandler(logging.Handler): # Inherit from logging.Handler
def __init__(self):
logging.Handler.__init__(self)
self._db = db
def emit(self, record):
args = {}
args['loggername'] = record.name
args['srclineno'] = record.lineno
args['func'] = record.funcName
args['level'] = record.levelname
args['msg'] = record.msg
try:
args['type'] = record.args[0]
except:
args['type'] = None
self._db.log.insert(**args)
log_db = DAL('sqlite://log.sqlite')
log_db.define_table('log',
Field('loggername', 'string'), #unique=True
Field('srclineno', 'string'),
Field('func', 'string'),
Field('level', 'string'),
Field('msg', 'string'),
Field('type', 'string'),
)
import logging
logger = logging.getLogger("web2py.app.myapp")
logger.setLevel(logging.DEBUG)
logger.addHandler(AppHandler(log_db))
logger.debug('test log')
I don't understand how I'm causing this, as all as im doing is creating a
second db instance and inserting using web2py DAL methods?