Java 如何使JDBC的查询显示在postgres日志中?
我正在使用Postgres作为数据库的spring引导服务器上工作。我希望能够有一个来自服务器的查询日志文件。我已经找到了我的sql日志,可以看到我通过psql对数据库进行的查询,但是没有记录通过jdbc从服务器发出的查询。如何使这些查询显示在日志文件中?或者,如果它们只是被记录在其他地方,有人能告诉我正确的方向吗?您可以将log\u min\u duration\u statement设置为0来记录所有语句。但是要小心,因为这会大大增加日志的大小 在jdbc连接url中设置应用程序名称也很有帮助,这样可以更容易地选择适当的日志消息:Java 如何使JDBC的查询显示在postgres日志中?,java,database,postgresql,spring-boot,jdbc,Java,Database,Postgresql,Spring Boot,Jdbc,我正在使用Postgres作为数据库的spring引导服务器上工作。我希望能够有一个来自服务器的查询日志文件。我已经找到了我的sql日志,可以看到我通过psql对数据库进行的查询,但是没有记录通过jdbc从服务器发出的查询。如何使这些查询显示在日志文件中?或者,如果它们只是被记录在其他地方,有人能告诉我正确的方向吗?您可以将log\u min\u duration\u statement设置为0来记录所有语句。但是要小心,因为这会大大增加日志的大小 在jdbc连接url中设置应用程序名称也很有帮
jdbc:postgresql://host:5432/DB?ApplicationName=YourApp
您可以将log_min_duration_语句设置为0以记录所有语句。但是要小心,因为这会大大增加日志的大小 在jdbc连接url中设置应用程序名称也很有帮助,这样可以更容易地选择适当的日志消息:
jdbc:postgresql://host:5432/DB?ApplicationName=YourApp
如果
log\u statement=all
来自您的postgresql.conf文件,但有时似乎无效,则该设置可能已在数据库或用户级别被覆盖。在发出“全部显示”之前,请确保与应用服务器连接的数据库和用户相同
它们可能会被以下内容之一所覆盖:
alter user <foo> set log_statements='none';
alter database <foo> set log_statements='none';
如果
log\u statement=all
来自您的postgresql.conf文件,但有时似乎无效,则该设置可能已在数据库或用户级别被覆盖。在发出“全部显示”之前,请确保与应用服务器连接的数据库和用户相同
它们可能会被以下内容之一所覆盖:
alter user <foo> set log_statements='none';
alter database <foo> set log_statements='none';
为了获取每个查询的日志,我使用选项
log\u statement=all
,该选项配置为命令行参数,用于postgres过程。我使用以下docker compose文件在开发环境中运行postgresql数据库
version: "3.8"
services:
db-ct:
container_name: 'my-container-name'
image: 'postgres:13'
environment:
- POSTGRES_USER=database-username-created-on-container-creation
- POSTGRES_PASSWORD=database-password-created-on-container-creation
- POSTGRES_DB=database-name-created-on-container-creation
ports:
# The port is available by sql clients, like sqldeveloper
- '5000:5432'
volumes:
- db:/var/lib/postgresql/data/
restart: 'no'
# Run postgres and log all queries
command: [ "postgres", "-c", "log_statement=all" ]
networks:
internal:
volumes:
# Database files
# They are stored in a volume thus they are not reset after rebuilding the images
db:
name: your-volume-name
networks:
internal:
第19行:命令行参数
需要4个替换项:我的容器名称
,创建容器时创建的数据库用户名
,创建容器时创建的数据库密码
,创建容器时创建的数据库名称
,您的卷名
数据库将在端口5000上侦听。为了获取每个查询的日志,我使用选项
log\u statement=all
,该选项配置为命令行参数,用于postgres进程。我使用以下docker compose文件在开发环境中运行postgresql数据库
version: "3.8"
services:
db-ct:
container_name: 'my-container-name'
image: 'postgres:13'
environment:
- POSTGRES_USER=database-username-created-on-container-creation
- POSTGRES_PASSWORD=database-password-created-on-container-creation
- POSTGRES_DB=database-name-created-on-container-creation
ports:
# The port is available by sql clients, like sqldeveloper
- '5000:5432'
volumes:
- db:/var/lib/postgresql/data/
restart: 'no'
# Run postgres and log all queries
command: [ "postgres", "-c", "log_statement=all" ]
networks:
internal:
volumes:
# Database files
# They are stored in a volume thus they are not reset after rebuilding the images
db:
name: your-volume-name
networks:
internal:
第19行:命令行参数
需要4个替换项:我的容器名称
,创建容器时创建的数据库用户名
,创建容器时创建的数据库密码
,创建容器时创建的数据库名称
,您的卷名
数据库将在端口5000上侦听。记录到Postgres日志中的查询不会因应用程序而有所区别——您是否可以使用
log\u min\u duration\u语句
和log\u语句
的值更新您的日志(从psql
中运行SHOW ALL
)。请同时显示与log.*
相关的其他参数。我添加了一张带有日志值的图片,为什么不在Spring Boot应用程序日志中记录SQL调用?比如:logging.level.org.hibernate.SQL=DEBUG
我已经在做了。问题是,某个查询没有返回结果集,但当我将其从服务器日志复制粘贴到psql时,它会工作。我希望能够看到postgres发布的日志,以了解数据库方面的情况。记录到postgres日志中的查询不会因应用程序而有所不同——您能否在显示所有输出中使用log\u min\u duration\u语句
和log\u语句
的值更新您的帖子(从psql
运行SHOW ALL
)。请同时显示与log.*
相关的其他参数。我添加了一个带有日志值的图片为什么不在Spring Boot应用程序日志中记录SQL调用?例如:logging.level.org.hibernate.SQL=DEBUG
我已经在这样做了。问题是某个查询没有返回结果集,但在我从服务器日志到psql。我希望能够看到postgres正在发布的日志,以查看数据库端的情况。如果我使用postgres控制台从intellij运行show all
,我可以看到日志级别设置为与我的postgresql.conf不同的级别。知道我在什么地方可以找到正在使用的配置吗jdbc连接?如果我使用postgres控制台从intellij运行show all
,我可以看到日志级别设置为与postgresql.conf不同的值。知道jdbc连接时使用的配置在哪里吗?