Reputation: 193
I am trying to turn logging off from sqlalchemy completely. I am creating a custom logging framework for Flask and errors from sqlalchemy/engine/base.py, sqlalchemy/engine/impl.py keep showing up..
I tried doing: logging.getLogger('SQLAlchemy.pool.base').addHandler(logging.NullHandler())
and
logging.getLogger('SQLAlchemy.pool.impl').addHandler(logging.NullHandler())
but they didn't work because they don't leverage python logging traditionally. Instead of having logger=logging.getLogger(__name__)
they import from a log file in the library and so I then tried:
logging.getLogger('sqlalchemy.log').addHandler(logging.NullHandler())
instead, but that didn't work either.
I tried the following, but those didn't pan out either:
How to turn sqlalchemy logging off completely
https://docs.sqlalchemy.org/en/14/core/engines.html#more-on-the-echo-flag
Here is the code:
from sqlalchemy import create_engine
from snowflake.sqlalchemy import URL
@app.route("/")
@app.route("/home")
def home():
engine = create_engine('snowflake://{user}:{password}@{account}/'.format(user='user-name', password='password', account='account'), echo=False, echo_pool=False)
try:
connection = engine.connect()
results = connection.execute('select current_version()').fetchone()
print(results[0])
connection.close()
finally:
engine.dispose()
return render_template('home.html', posts=posts)
and here is the errors:
raceback (most recent call last):
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 606, in __connect
pool.logger.debug("Created new connection %r", connection)
TypeError: debug() takes 1 positional argument but 3 were given
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "sample_projects/app.py", line 69, in home
connection = engine.connect()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3165, in connect
return self._connection_cls(self, close_with_result=close_with_result)
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
else engine.raw_connection()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3244, in raw_connection
return self._wrap_pool_connect(self.pool.connect, _connection)
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3211, in _wrap_pool_connect
return fn()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 307, in connect
return _ConnectionFairy._checkout(self)
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 767, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 425, in checkout
rec = pool._do_get()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/impl.py", line 146, in _do_get
self._dec_overflow()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
compat.raise_(
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
return self._create_connection()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 253, in _create_connection
return _ConnectionRecord(self)
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 368, in __init__
self.__connect()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 611, in __connect
pool.logger.debug("Error on connect(): %s", e)
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 84, in __exit__
compat.raise_(value, with_traceback=traceback)
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 611, in __connect
pool.logger.debug("Error on connect(): %s", e)
TypeError: debug() takes 1 positional argument but 3 were given
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "sample_projects/env/lib/python3.8/site-packages/flask/app.py", line 2088, in __call__
return self.wsgi_app(environ, start_response)
File "sample_projects/env/lib/python3.8/site-packages/flask/app.py", line 2073, in wsgi_app
response = self.handle_exception(e)
File "sample_projects/env/lib/python3.8/site-packages/flask/app.py", line 2070, in wsgi_app
response = self.full_dispatch_request()
File "sample_projects/env/lib/python3.8/site-packages/flask/app.py", line 1515, in full_dispatch_request
rv = self.handle_user_exception(e)
File "sample_projects/env/lib/python3.8/site-packages/flask/app.py", line 1513, in full_dispatch_request
rv = self.dispatch_request()
File "sample_projects/env/lib/python3.8/site-packages/flask/app.py", line 1499, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "sample_projects/app.py", line 76, in home
engine.dispose()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2920, in dispose
self.pool.dispose()
File "sample_projects/env/lib/python3.8/site-packages/sqlalchemy/pool/impl.py", line 195, in dispose
self.logger.info("Pool disposed. %s", self.status())
TypeError: info() takes 1 positional argument but 3 were given
I would appreciate any insight that you might have. Ask me questions if I forgot to address something. Thank you if you read this far haha!
Upvotes: 0
Views: 1335
Reputation: 519
Replace all the handlers with the NullHandler:
logging.getLogger("sqlalchemy").handlers = [logging.NullHandler()]
Upvotes: 0
Reputation: 135
The following doesn't work because you're adding a handler on top of the existing handlers.
logger = logging.getLogger('sqlalchemy')
logger.addHandler(logging.NullHandler()) # creates an additional log handler
What you actually want to do is modify the existing handler.
logger = logging.getLogger('sqlalchemy')
logger.setLevel(logging.ERROR) # modifies the current log handler
Upvotes: 1