Skip to content

Commit d021ec5

Browse files
committed
fix: improve log output
- log metadata as JSON instead of one `msg` string - add method, url, and db hostname Example output: [1639563867039] ERROR (56210 on ClamShell-Air.local): reqId: "req-1" request: { "method": "POST", "path": "/query?hello=there", "huh": "/query", "pg": "db.xndhvgqwezrhpnmpxgcs.supabase.co", "body": { "query": "select * from s" } } error: { "message": "relation \"s\" does not exist" }
1 parent 30acd2f commit d021ec5

14 files changed

+76
-54
lines changed

src/server/app.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
import fastify from 'fastify'
22
import { PG_META_EXPORT_DOCS, PG_META_PORT } from './constants'
33
import routes from './routes'
4+
import { extractRequestForLogging } from './utils'
45
import pkg from '../../package.json'
56

67
const app = fastify({ logger: true, disableRequestLogging: true })
78

89
app.setErrorHandler((error, request, reply) => {
9-
app.log.error(JSON.stringify({ error, req: request.body }))
10+
app.log.error({ error, request: extractRequestForLogging(request) })
1011
reply.code(500).send({ error: error.message })
1112
})
1213

1314
app.setNotFoundHandler((request, reply) => {
14-
app.log.error(JSON.stringify({ error: 'Not found', req: request.body }))
15+
app.log.error({ error: 'Not found', request: extractRequestForLogging(request) })
1516
reply.code(404).send({ error: 'Not found' })
1617
})
1718

src/server/routes/columns.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { FastifyInstance } from 'fastify'
22
import { PostgresMeta } from '../../lib'
33
import { DEFAULT_POOL_CONFIG } from '../constants'
4+
import { extractRequestForLogging } from '../utils'
45

56
export default async (fastify: FastifyInstance) => {
67
fastify.get<{
@@ -24,7 +25,7 @@ export default async (fastify: FastifyInstance) => {
2425
})
2526
await pgMeta.end()
2627
if (error) {
27-
request.log.error(JSON.stringify({ error, req: request.body }))
28+
request.log.error({ error, request: extractRequestForLogging(request) })
2829
reply.code(500)
2930
return { error: error.message }
3031
}
@@ -44,7 +45,7 @@ export default async (fastify: FastifyInstance) => {
4445
const { data, error } = await pgMeta.columns.retrieve({ id: request.params.id })
4546
await pgMeta.end()
4647
if (error) {
47-
request.log.error(JSON.stringify({ error, req: request.body }))
48+
request.log.error({ error, request: extractRequestForLogging(request) })
4849
reply.code(400)
4950
if (error.message.startsWith('Cannot find')) reply.code(404)
5051
return { error: error.message }
@@ -63,7 +64,7 @@ export default async (fastify: FastifyInstance) => {
6364
const { data, error } = await pgMeta.columns.create(request.body)
6465
await pgMeta.end()
6566
if (error) {
66-
request.log.error(JSON.stringify({ error, req: request.body }))
67+
request.log.error({ error, request: extractRequestForLogging(request) })
6768
reply.code(400)
6869
if (error.message.startsWith('Cannot find')) reply.code(404)
6970
return { error: error.message }
@@ -85,7 +86,7 @@ export default async (fastify: FastifyInstance) => {
8586
const { data, error } = await pgMeta.columns.update(request.params.id, request.body)
8687
await pgMeta.end()
8788
if (error) {
88-
request.log.error(JSON.stringify({ error, req: request.body }))
89+
request.log.error({ error, request: extractRequestForLogging(request) })
8990
reply.code(400)
9091
if (error.message.startsWith('Cannot find')) reply.code(404)
9192
return { error: error.message }
@@ -109,7 +110,7 @@ export default async (fastify: FastifyInstance) => {
109110
const { data, error } = await pgMeta.columns.remove(request.params.id)
110111
await pgMeta.end()
111112
if (error) {
112-
request.log.error(JSON.stringify({ error, req: request.body }))
113+
request.log.error({ error, request: extractRequestForLogging(request) })
113114
reply.code(400)
114115
if (error.message.startsWith('Cannot find')) reply.code(404)
115116
return { error: error.message }

src/server/routes/config.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { FastifyInstance } from 'fastify'
22
import { PostgresMeta } from '../../lib'
33
import { DEFAULT_POOL_CONFIG } from '../constants'
4+
import { extractRequestForLogging } from '../utils'
45

56
export default async (fastify: FastifyInstance) => {
67
fastify.get<{
@@ -18,7 +19,7 @@ export default async (fastify: FastifyInstance) => {
1819
const { data, error } = await pgMeta.config.list({ limit, offset })
1920
await pgMeta.end()
2021
if (error) {
21-
request.log.error(JSON.stringify({ error, req: request.body }))
22+
request.log.error({ error, request: extractRequestForLogging(request) })
2223
reply.code(500)
2324
return { error: error.message }
2425
}
@@ -35,7 +36,7 @@ export default async (fastify: FastifyInstance) => {
3536
const { data, error } = await pgMeta.version.retrieve()
3637
await pgMeta.end()
3738
if (error) {
38-
request.log.error(JSON.stringify({ error, req: request.body }))
39+
request.log.error({ error, request: extractRequestForLogging(request) })
3940
reply.code(500)
4041
return { error: error.message }
4142
}

src/server/routes/extensions.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { FastifyInstance } from 'fastify'
22
import { PostgresMeta } from '../../lib'
33
import { DEFAULT_POOL_CONFIG } from '../constants'
4+
import { extractRequestForLogging } from '../utils'
45

56
export default async (fastify: FastifyInstance) => {
67
fastify.get<{
@@ -18,7 +19,7 @@ export default async (fastify: FastifyInstance) => {
1819
const { data, error } = await pgMeta.extensions.list({ limit, offset })
1920
await pgMeta.end()
2021
if (error) {
21-
request.log.error(JSON.stringify({ error, req: request.body }))
22+
request.log.error({ error, request: extractRequestForLogging(request) })
2223
reply.code(500)
2324
return { error: error.message }
2425
}
@@ -38,7 +39,7 @@ export default async (fastify: FastifyInstance) => {
3839
const { data, error } = await pgMeta.extensions.retrieve({ name: request.params.name })
3940
await pgMeta.end()
4041
if (error) {
41-
request.log.error(JSON.stringify({ error, req: request.body }))
42+
request.log.error({ error, request: extractRequestForLogging(request) })
4243
reply.code(404)
4344
return { error: error.message }
4445
}
@@ -56,7 +57,7 @@ export default async (fastify: FastifyInstance) => {
5657
const { data, error } = await pgMeta.extensions.create(request.body)
5758
await pgMeta.end()
5859
if (error) {
59-
request.log.error(JSON.stringify({ error, req: request.body }))
60+
request.log.error({ error, request: extractRequestForLogging(request) })
6061
reply.code(400)
6162
return { error: error.message }
6263
}
@@ -77,7 +78,7 @@ export default async (fastify: FastifyInstance) => {
7778
const { data, error } = await pgMeta.extensions.update(request.params.name, request.body)
7879
await pgMeta.end()
7980
if (error) {
80-
request.log.error(JSON.stringify({ error, req: request.body }))
81+
request.log.error({ error, request: extractRequestForLogging(request) })
8182
reply.code(400)
8283
if (error.message.startsWith('Cannot find')) reply.code(404)
8384
return { error: error.message }
@@ -102,7 +103,7 @@ export default async (fastify: FastifyInstance) => {
102103
const { data, error } = await pgMeta.extensions.remove(request.params.name, { cascade })
103104
await pgMeta.end()
104105
if (error) {
105-
request.log.error(JSON.stringify({ error, req: request.body }))
106+
request.log.error({ error, request: extractRequestForLogging(request) })
106107
reply.code(400)
107108
if (error.message.startsWith('Cannot find')) reply.code(404)
108109
return { error: error.message }

src/server/routes/functions.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { FastifyInstance } from 'fastify'
22
import { PostgresMeta } from '../../lib'
33
import { DEFAULT_POOL_CONFIG } from '../constants'
4+
import { extractRequestForLogging } from '../utils'
45

56
export default async (fastify: FastifyInstance) => {
67
fastify.get<{
@@ -20,7 +21,7 @@ export default async (fastify: FastifyInstance) => {
2021
const { data, error } = await pgMeta.functions.list({ includeSystemSchemas, limit, offset })
2122
await pgMeta.end()
2223
if (error) {
23-
request.log.error(JSON.stringify({ error, req: request.body }))
24+
request.log.error({ error, request: extractRequestForLogging(request) })
2425
reply.code(500)
2526
return { error: error.message }
2627
}
@@ -41,7 +42,7 @@ export default async (fastify: FastifyInstance) => {
4142
const { data, error } = await pgMeta.functions.retrieve({ id })
4243
await pgMeta.end()
4344
if (error) {
44-
request.log.error(JSON.stringify({ error, req: request.body }))
45+
request.log.error({ error, request: extractRequestForLogging(request) })
4546
reply.code(404)
4647
return { error: error.message }
4748
}
@@ -59,7 +60,7 @@ export default async (fastify: FastifyInstance) => {
5960
const { data, error } = await pgMeta.functions.create(request.body)
6061
await pgMeta.end()
6162
if (error) {
62-
request.log.error(JSON.stringify({ error, req: request.body }))
63+
request.log.error({ error, request: extractRequestForLogging(request) })
6364
reply.code(400)
6465
return { error: error.message }
6566
}
@@ -80,7 +81,7 @@ export default async (fastify: FastifyInstance) => {
8081
const { data, error } = await pgMeta.functions.update(id, request.body)
8182
await pgMeta.end()
8283
if (error) {
83-
request.log.error(JSON.stringify({ error, req: request.body }))
84+
request.log.error({ error, request: extractRequestForLogging(request) })
8485
reply.code(400)
8586
if (error.message.startsWith('Cannot find')) reply.code(404)
8687
return { error: error.message }
@@ -101,7 +102,7 @@ export default async (fastify: FastifyInstance) => {
101102
const { data, error } = await pgMeta.functions.remove(id)
102103
await pgMeta.end()
103104
if (error) {
104-
request.log.error(JSON.stringify({ error, req: request.body }))
105+
request.log.error({ error, request: extractRequestForLogging(request) })
105106
reply.code(400)
106107
if (error.message.startsWith('Cannot find')) reply.code(404)
107108
return { error: error.message }

src/server/routes/policies.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { FastifyInstance } from 'fastify'
22
import { PostgresMeta } from '../../lib'
33
import { DEFAULT_POOL_CONFIG } from '../constants'
4+
import { extractRequestForLogging } from '../utils'
45

56
export default async (fastify: FastifyInstance) => {
67
fastify.get<{
@@ -20,7 +21,7 @@ export default async (fastify: FastifyInstance) => {
2021
const { data, error } = await pgMeta.policies.list({ includeSystemSchemas, limit, offset })
2122
await pgMeta.end()
2223
if (error) {
23-
request.log.error(JSON.stringify({ error, req: request.body }))
24+
request.log.error({ error, request: extractRequestForLogging(request) })
2425
reply.code(500)
2526
return { error: error.message }
2627
}
@@ -41,7 +42,7 @@ export default async (fastify: FastifyInstance) => {
4142
const { data, error } = await pgMeta.policies.retrieve({ id })
4243
await pgMeta.end()
4344
if (error) {
44-
request.log.error(JSON.stringify({ error, req: request.body }))
45+
request.log.error({ error, request: extractRequestForLogging(request) })
4546
reply.code(404)
4647
return { error: error.message }
4748
}
@@ -59,7 +60,7 @@ export default async (fastify: FastifyInstance) => {
5960
const { data, error } = await pgMeta.policies.create(request.body)
6061
await pgMeta.end()
6162
if (error) {
62-
request.log.error(JSON.stringify({ error, req: request.body }))
63+
request.log.error({ error, request: extractRequestForLogging(request) })
6364
reply.code(400)
6465
return { error: error.message }
6566
}
@@ -81,7 +82,7 @@ export default async (fastify: FastifyInstance) => {
8182
const { data, error } = await pgMeta.policies.update(id, request.body)
8283
await pgMeta.end()
8384
if (error) {
84-
request.log.error(JSON.stringify({ error, req: request.body }))
85+
request.log.error({ error, request: extractRequestForLogging(request) })
8586
reply.code(400)
8687
if (error.message.startsWith('Cannot find')) reply.code(404)
8788
return { error: error.message }
@@ -103,7 +104,7 @@ export default async (fastify: FastifyInstance) => {
103104
const { data, error } = await pgMeta.policies.remove(id)
104105
await pgMeta.end()
105106
if (error) {
106-
request.log.error(JSON.stringify({ error, req: request.body }))
107+
request.log.error({ error, request: extractRequestForLogging(request) })
107108
reply.code(400)
108109
if (error.message.startsWith('Cannot find')) reply.code(404)
109110
return { error: error.message }

src/server/routes/publications.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { FastifyInstance } from 'fastify'
22
import { PostgresMeta } from '../../lib'
33
import { DEFAULT_POOL_CONFIG } from '../constants'
4+
import { extractRequestForLogging } from '../utils'
45

56
export default async (fastify: FastifyInstance) => {
67
fastify.get<{
@@ -18,7 +19,7 @@ export default async (fastify: FastifyInstance) => {
1819
const { data, error } = await pgMeta.publications.list({ limit, offset })
1920
await pgMeta.end()
2021
if (error) {
21-
request.log.error(JSON.stringify({ error, req: request.body }))
22+
request.log.error({ error, request: extractRequestForLogging(request) })
2223
reply.code(500)
2324
return { error: error.message }
2425
}
@@ -39,7 +40,7 @@ export default async (fastify: FastifyInstance) => {
3940
const { data, error } = await pgMeta.publications.retrieve({ id })
4041
await pgMeta.end()
4142
if (error) {
42-
request.log.error(JSON.stringify({ error, req: request.body }))
43+
request.log.error({ error, request: extractRequestForLogging(request) })
4344
reply.code(404)
4445
return { error: error.message }
4546
}
@@ -57,7 +58,7 @@ export default async (fastify: FastifyInstance) => {
5758
const { data, error } = await pgMeta.publications.create(request.body)
5859
await pgMeta.end()
5960
if (error) {
60-
request.log.error(JSON.stringify({ error, req: request.body }))
61+
request.log.error({ error, request: extractRequestForLogging(request) })
6162
reply.code(400)
6263
return { error: error.message }
6364
}
@@ -79,7 +80,7 @@ export default async (fastify: FastifyInstance) => {
7980
const { data, error } = await pgMeta.publications.update(id, request.body)
8081
await pgMeta.end()
8182
if (error) {
82-
request.log.error(JSON.stringify({ error, req: request.body }))
83+
request.log.error({ error, request: extractRequestForLogging(request) })
8384
reply.code(400)
8485
if (error.message.startsWith('Cannot find')) reply.code(404)
8586
return { error: error.message }
@@ -101,7 +102,7 @@ export default async (fastify: FastifyInstance) => {
101102
const { data, error } = await pgMeta.publications.remove(id)
102103
await pgMeta.end()
103104
if (error) {
104-
request.log.error(JSON.stringify({ error, req: request.body }))
105+
request.log.error({ error, request: extractRequestForLogging(request) })
105106
reply.code(400)
106107
if (error.message.startsWith('Cannot find')) reply.code(404)
107108
return { error: error.message }

src/server/routes/query.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { FastifyInstance } from 'fastify'
22
import { PostgresMeta } from '../../lib'
33
import * as Parser from '../../lib/Parser'
44
import { DEFAULT_POOL_CONFIG } from '../constants'
5+
import { extractRequestForLogging } from '../utils'
56

67
export default async (fastify: FastifyInstance) => {
78
fastify.post<{
@@ -16,7 +17,7 @@ export default async (fastify: FastifyInstance) => {
1617
const { data, error } = await pgMeta.query(request.body.query)
1718
await pgMeta.end()
1819
if (error) {
19-
request.log.error(JSON.stringify({ error, req: request.body }))
20+
request.log.error({ error, request: extractRequestForLogging(request) })
2021
reply.code(400)
2122
return { error: error.message }
2223
}
@@ -33,7 +34,7 @@ export default async (fastify: FastifyInstance) => {
3334
const { data, error } = Parser.Format(request.body.query)
3435

3536
if (error) {
36-
request.log.error(JSON.stringify({ error, req: request.body }))
37+
request.log.error({ error, request: extractRequestForLogging(request) })
3738
reply.code(400)
3839
return { error: error.message }
3940
}
@@ -50,7 +51,7 @@ export default async (fastify: FastifyInstance) => {
5051
const { data, error } = Parser.Parse(request.body.query)
5152

5253
if (error) {
53-
request.log.error(JSON.stringify({ error, req: request.body }))
54+
request.log.error({ error, request: extractRequestForLogging(request) })
5455
reply.code(400)
5556
return { error: error.message }
5657
}
@@ -67,7 +68,7 @@ export default async (fastify: FastifyInstance) => {
6768
const { data, error } = Parser.Deparse(request.body.ast)
6869

6970
if (error) {
70-
request.log.error(JSON.stringify({ error, req: request.body }))
71+
request.log.error({ error, request: extractRequestForLogging(request) })
7172
reply.code(400)
7273
return { error: error.message }
7374
}

0 commit comments

Comments
 (0)