The issue is that you have configured two handlers by setting
handler=consoleHandler in two places, it should only be on "root" typically.
engine.echo uses Python logging underneath and calling engine.echo as a getter
calls logger.isEnabledFor(logging.INFO), so that indicates nothing about the
issue.
On May 9, 2010, at 10:15 PM, hal_robertson wrote:
> Hi there
>
> I have an application that uses the Python logging facility. The
> logging system is configured through a config file
>
> I would like to be able to adjust sqlalchemy logging through the
> config file
>
> However, it seems when I configure the logging system it turns
> sqlalchemy echo to True on my engine, resulting in two log entries for
> each sqlalchemy output.
>
> How do I configure the logging system properly in an external config
> file for sqlalchemy without the double log entries? Or is this not
> possible? Hopefully I've made a simple mistake that's easy to fix.
>
> thanks
>
> Hal
>
> Test program, config file, and output below:
>
> ---- python, sqlalchemy versions:
>
> Python 2.6.5 (r265:79063, Apr 6 2010, 18:52:40)
> [GCC 4.2.1 (Apple Inc. build 5646)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import sqlalchemy
>>>> sqlalchemy.__version__
> '0.6.0'
>
> --- test_logger.py:
>
> from sqlalchemy import MetaData, create_engine, Table, Column, String,
> Integer
> from sqlalchemy.orm import sessionmaker, mapper
> import logging, logging.config
>
> engine = create_engine('sqlite:///dummy.db')
> # reports engine.echo is False
> print 'engine.echo==%s' % engine.echo
>
> # initializing logging after create_engine sets engine.echo to true
> logging.config.fileConfig('config/logging.conf')
> log = logging.getLogger('root')
> log.debug("Logging initialized")
> log.debug("Unexpected: engine.echo==%s",engine.echo)
>
> ## from here on out all sqlalchemy logs are double-logged :(
>
> # If I explicitly force engine.echo back to False nothing gets logged
> from sqlalchemy
> # engine.echo = False
>
> metadata = MetaData()
> Session = sessionmaker(bind=engine)
> session = Session()
>
> # creating a table
> users_table = Table('users', metadata,
> Column('user_id', Integer, primary_key=True),
> Column('user_name', String(40))
> )
> metadata.create_all(engine)
>
> #create a holding class
> class User(object):
> def __repr__(self):
> return '%s(%r,%r)' % (
>
> self.__class__.__name__,self.user_name,self.user_id)
>
> # map the holding class to the table definition
> mapper(User, users_table)
>
> #create an instance of the class
> u1 = User()
> u1.user_name='bonose'
>
> session.add(u1)
> session.commit()
>
>
>
> --- config/logging.conf
>
> [loggers]
> keys=root, sqlalchemy
>
> [handlers]
> keys=consoleHandler
>
> [formatters]
> keys=simpleFormatter
>
> [logger_root]
> level=DEBUG
> handlers=consoleHandler
>
> [logger_sqlalchemy]
> level=INFO
> handlers=consoleHandler
> qualname=sqlalchemy.engine
>
> [handler_consoleHandler]
> class=StreamHandler
> level=DEBUG
> formatter=simpleFormatter
> args=(sys.stdout,)
>
> [formatter_simpleFormatter]
> format=[%(levelname)s] %(asctime)s (%(name)s) %(message)s
> datefmt=
>
>
> ---- OUTPUT
> ---- If I run the above program with the above config file I get
> double log entires to stdout:
>
> engine.echo==False
> [DEBUG] 2010-05-09 23:03:41,860 (root) Logging initialized
> [DEBUG] 2010-05-09 23:03:41,860 (root) Unexpected: engine.echo==True
> [INFO] 2010-05-09 23:03:41,862 (sqlalchemy.engine.base.Engine.
> 0x...ded0) PRAGMA table_info("users")
> [INFO] 2010-05-09 23:03:41,862 (sqlalchemy.engine.base.Engine.
> 0x...ded0) PRAGMA table_info("users")
> [INFO] 2010-05-09 23:03:41,862 (sqlalchemy.engine.base.Engine.
> 0x...ded0) ()
> [INFO] 2010-05-09 23:03:41,862 (sqlalchemy.engine.base.Engine.
> 0x...ded0) ()
> [INFO] 2010-05-09 23:03:41,863 (sqlalchemy.engine.base.Engine.
> 0x...ded0)
> CREATE TABLE users (
> user_id INTEGER NOT NULL,
> user_name VARCHAR(40),
> PRIMARY KEY (user_id)
> )
>
>
> [INFO] 2010-05-09 23:03:41,863 (sqlalchemy.engine.base.Engine.
> 0x...ded0)
> CREATE TABLE users (
> user_id INTEGER NOT NULL,
> user_name VARCHAR(40),
> PRIMARY KEY (user_id)
> )
>
>
> [INFO] 2010-05-09 23:03:41,863 (sqlalchemy.engine.base.Engine.
> 0x...ded0) ()
> [INFO] 2010-05-09 23:03:41,863 (sqlalchemy.engine.base.Engine.
> 0x...ded0) ()
> [INFO] 2010-05-09 23:03:41,864 (sqlalchemy.engine.base.Engine.
> 0x...ded0) COMMIT
> [INFO] 2010-05-09 23:03:41,864 (sqlalchemy.engine.base.Engine.
> 0x...ded0) COMMIT
> [INFO] 2010-05-09 23:03:41,866 (sqlalchemy.engine.base.Engine.
> 0x...ded0) BEGIN
> [INFO] 2010-05-09 23:03:41,866 (sqlalchemy.engine.base.Engine.
> 0x...ded0) BEGIN
> [INFO] 2010-05-09 23:03:41,866 (sqlalchemy.engine.base.Engine.
> 0x...ded0) INSERT INTO users (user_name) VALUES (?)
> [INFO] 2010-05-09 23:03:41,866 (sqlalchemy.engine.base.Engine.
> 0x...ded0) INSERT INTO users (user_name) VALUES (?)
> [INFO] 2010-05-09 23:03:41,866 (sqlalchemy.engine.base.Engine.
> 0x...ded0) ('bonose',)
> [INFO] 2010-05-09 23:03:41,866 (sqlalchemy.engine.base.Engine.
> 0x...ded0) ('bonose',)
> [INFO] 2010-05-09 23:03:41,867 (sqlalchemy.engine.base.Engine.
> 0x...ded0) COMMIT
> [INFO] 2010-05-09 23:03:41,867 (sqlalchemy.engine.base.Engine.
> 0x...ded0) COMMIT
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.