程序连接oracle 日志,创建连接到Oracle的日志处理程序?

如果cx_Oracle出现错误,最好将这些错误记录到文本文件中。

您可以尝试将sys.stdout和sys.stderr重定向到类似文件的对象,这些对象会将写入它们的任何内容记录到记录器中。

我想你是真的想在每一次事件之后都做出承诺,除非你有充分的理由不这样做。或者,您可以缓冲多个事件,并每隔一段时间将它们全部写入一个事务中。

下面是一个使用mx.ODBC的示例,您可以将其应用于cx_Oracle,而不会遇到太多麻烦。我认为它应该是符合PythonDB-API2.0的。

独立的Python日志记录发行版(在将日志记录添加到Python之前)位于http://www.red-dove.com/python_logging.html,尽管Python中的日志记录包是最新的,但是独立发行版包含一个测试目录,其中包含许多派生处理程序类的有用示例。#!/usr/bin/env python

#

# Copyright 2001-2009 by Vinay Sajip. All Rights Reserved.

#

# Permission to use, copy, modify, and distribute this software and its

# documentation for any purpose and without fee is hereby granted,

# provided that the above copyright notice appear in all copies and that

# both that copyright notice and this permission notice appear in

# supporting documentation, and that the name of Vinay Sajip

# not be used in advertising or publicity pertaining to distribution

# of the software without specific, written prior permission.

# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING

# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL

# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR

# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER

# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT

# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

#

# This file is part of the standalone Python logging distribution. See

# http://www.red-dove.com/python_logging.html

#

"""

A test harness for the logging module. An example handler - DBHandler -

which writes to an Python DB API 2.0 data source. You'll need to set this

source up before you run the test.

Copyright (C) 2001-2009 Vinay Sajip. All Rights Reserved.

"""

import sys, string, time, logging

class DBHandler(logging.Handler):

def __init__(self, dsn, uid='', pwd=''):

logging.Handler.__init__(self)

import mx.ODBC.Windows

self.dsn = dsn

self.uid = uid

self.pwd = pwd

self.conn = mx.ODBC.Windows.connect(self.dsn, self.uid, self.pwd)

self.SQL = """INSERT INTO Events (

Created,

RelativeCreated,

Name,

LogLevel,

LevelText,

Message,

Filename,

Pathname,

Lineno,

Milliseconds,

Exception,

Thread

)

VALUES (

%(dbtime)s,

%(relativeCreated)d,

'%(name)s',

%(levelno)d,

'%(levelname)s',

'%(message)s',

'%(filename)s',

'%(pathname)s',

%(lineno)d,

%(msecs)d,

'%(exc_text)s',

'%(thread)s'

);

"""

self.cursor = self.conn.cursor()

def formatDBTime(self, record):

record.dbtime = time.strftime("#%m/%d/%Y#", time.localtime(record.created))

def emit(self, record):

try:

#use default formatting

self.format(record)

#now set the database time up

self.formatDBTime(record)

if record.exc_info:

record.exc_text = logging._defaultFormatter.formatException(record.exc_info)

else:

record.exc_text = ""

sql = self.SQL % record.__dict__

self.cursor.execute(sql)

self.conn.commit()

except:

import traceback

ei = sys.exc_info()

traceback.print_exception(ei[0], ei[1], ei[2], None, sys.stderr)

del ei

def close(self):

self.cursor.close()

self.conn.close()

logging.Handler.close(self)

dh = DBHandler('Logging')

logger = logging.getLogger("")

logger.setLevel(logging.DEBUG)

logger.addHandler(dh)

logger.info("Jackdaws love my big %s of %s", "sphinx", "quartz")

logger.debug("Pack my %s with five dozen %s", "box", "liquor jugs")

try:

import math

math.exp(1000)

except:

logger.exception("Problem with %s", "math.exp")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值