summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-03-03 00:24:41 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-03-03 00:24:41 +0000
commit13710ae742c18eb589a204bc9d242cccf66ae4b0 (patch)
tree0551f34d1d06ffd150da63d13b7d2f17aee979a0
parent64792659d12c02534de2124e9f53b17105c0946b (diff)
downloadsqlalchemy-13710ae742c18eb589a204bc9d242cccf66ae4b0.tar.gz
added util.Logger object with configurable thread/timestamp view
-rw-r--r--lib/sqlalchemy/engine.py9
-rw-r--r--lib/sqlalchemy/pool.py6
-rw-r--r--lib/sqlalchemy/util.py31
-rw-r--r--test/engines.py2
4 files changed, 37 insertions, 11 deletions
diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py
index 757d3517e..8828e2a0b 100644
--- a/lib/sqlalchemy/engine.py
+++ b/lib/sqlalchemy/engine.py
@@ -186,10 +186,7 @@ class SQLEngine(schema.SchemaEngine):
self.context = util.ThreadLocal(raiseerror=False)
self._ischema = None
self._figure_paramstyle()
- if logger is None:
- self.logger = sys.stdout
- else:
- self.logger = logger
+ self.logger = logger or util.Logger(origin='engine')
def _get_ischema(self):
# We use a property for ischema so that the accessor
@@ -607,7 +604,7 @@ class SQLEngine(schema.SchemaEngine):
def log(self, msg):
"""logs a message using this SQLEngine's logger stream."""
- self.logger.write(msg + "\n")
+ self.logger.write(msg)
class ResultProxy:
@@ -685,7 +682,7 @@ class ResultProxy:
"""fetches one row, just like DBAPI cursor.fetchone()."""
row = self.cursor.fetchone()
if row is not None:
- if self.echo: print repr(row)
+ if self.echo: self.engine.log(repr(row))
return RowProxy(self, row)
else:
return None
diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py
index fe5c29e88..783b4450b 100644
--- a/lib/sqlalchemy/pool.py
+++ b/lib/sqlalchemy/pool.py
@@ -11,6 +11,7 @@ be managed automatically, based on module type and connect arguments,
simply by calling regular DBAPI connect() methods."""
import Queue, weakref, string, cPickle
+import util
try:
import thread
@@ -69,10 +70,11 @@ def clear_managers():
class Pool(object):
- def __init__(self, echo = False, use_threadlocal = True):
+ def __init__(self, echo = False, use_threadlocal = True, logger=None):
self._threadconns = weakref.WeakValueDictionary()
self._use_threadlocal = use_threadlocal
self._echo = echo
+ self._logger = logger or util.Logger(origin='pool')
def connect(self):
if not self._use_threadlocal:
@@ -115,7 +117,7 @@ class Pool(object):
raise NotImplementedError()
def log(self, msg):
- print msg
+ self.logger.write(msg)
class ConnectionFairy(object):
def __init__(self, pool):
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py
index 618900fcf..02bd5d587 100644
--- a/lib/sqlalchemy/util.py
+++ b/lib/sqlalchemy/util.py
@@ -5,7 +5,7 @@
# the MIT License: http://www.opensource.org/licenses/mit-license.php
__all__ = ['OrderedProperties', 'OrderedDict', 'generic_repr', 'HashSet', 'AttrProp']
-import thread, weakref, UserList,string, inspect
+import thread, threading, weakref, UserList, time, string, inspect, sys
from exceptions import *
def to_list(x):
@@ -51,7 +51,34 @@ def hash_key(obj):
return obj.hash_key()
else:
return repr(obj)
-
+
+class Logger(object):
+ """defines various forms of logging"""
+ def __init__(self, logger=None, usethreads=False, usetimestamp=True, origin=None):
+ self.logger = logger or sys.stdout
+ self.usethreads = usethreads
+ self.usetimestamp = usetimestamp
+ self.origin = origin
+ def write(self, msg):
+ if self.usetimestamp:
+ t = time.time()
+ ms = (t - long(t)) * 1000
+ timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(t))
+ timestamp = "[%s,%03d]" % (timestamp, ms)
+ else:
+ timestamp = None
+ if self.origin:
+ origin = "[%s]" % self.origin
+ origin = "%-8s" % origin
+ else:
+ origin = None
+ if self.usethreads:
+ threadname = threading.currentThread().getName()
+ threadname = "[" + threadname + ' '*(8-len(threadname)) + "]"
+ else:
+ threadname = None
+ self.logger.write(string.join([s for s in (timestamp, threadname, origin) if s is not None]) + ": " + msg + "\n")
+
class OrderedProperties(object):
"""
An object that maintains the order in which attributes are set upon it.
diff --git a/test/engines.py b/test/engines.py
index aeb962c9b..3bb20c725 100644
--- a/test/engines.py
+++ b/test/engines.py
@@ -121,7 +121,7 @@ class EngineTest(PersistTest):
table.insert().execute({'multi_id':3,'multi_rev':3,'name':'row3', 'value':'value3'})
table.select().execute().fetchall()
table.drop()
-
+
def testtoengine(self):
db = ansisql.engine()