
# 使用日志场景
本示例演示在Python驱动下使用日志的场景。
```
# 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在环境中设置环境变量EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
# 用户需要提供"database"、$port。"localhost"表示数据库在本地机器上运行。
import logging
import psycopg2
from psycopg2.extras import LoggingConnection
import os
# 从环境变量中获取用户名和密码。
userName = os.getenv('EXAMPLE_USERNAME_ENV')
passWord = os.getenv('EXAMPLE_PASSWORD_ENV')
logging.basicConfig(level=logging.DEBUG) # 日志级别。
logger = logging.getLogger(__name__)
db_settings = {
    "user": userName,
    "password": passWord,
    "host": "localhost",
    "dbname": "database",
    "port": $port
}
# LoggingConnection默认记录所有SQL，可自行实现filter过滤不需要的或敏感的SQL，下面给出了过滤password的相关SQL。
class SelfLoggingConnection(LoggingConnection):
    def filter(self, msg, curs):
        if db_settings['password'] in msg.decode():
            return b'queries containing the password will not be recorded'
        return msg
# 创建连接对象。
conn = psycopg2.connect(connection_factory=SelfLoggingConnection, **db_settings)
conn.initialize(logger)
cur = conn.cursor() #创建游标对象。
cur.execute("select 1;")
# 关闭游标和连接。
cur.close()
conn.close()
```
示例运行结果如下：
```
DEBUG:__main__:b'select 1;'
```
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
- LoggingConnection默认记录所有SQL信息，且不会对敏感信息进行脱敏，可通过filter函数自行定义输出的SQL内容。
- 日志功能是psycopg2为了方便开发者显性调试全量SQL而提供的额外功能，默认情况下不需要使用。该功能会在pyscopg2执行SQL语句前打印SQL语句，但是，需要在debug日志级别下才会输出。该功能不是默认功能，只在特殊需要时才使用，没有特别需求时不建议使用。详情参考：https://www.psycopg.org/docs/extras.html?highlight=loggingconnection。
 
