api: pull pino-pretty for better logging

Pedro Lucas Porcellis porcellis@eletrotupi.com 1 month ago d3859d7a3aea712c026e40c147d5359d66f841c7
Parents: 2cac61a
3 file(s) changed
  • api/package-lock.json +97 -0
  • api/package.json +1 -0
  • api/src/createApp.ts +17 -4
api/package-lock.json
@@ -45,6 +45,7 @@ "ava": "^6.4.1",
45 45 "cross-var": "^1.1.0",
46 46 "dotenv-cli": "^11.0.0",
47 47 "nodemon": "^3.1.14",
48 + "pino-pretty": "^13.1.3",
48 49 "prisma": "^7.5.0",
49 50 "supertest": "^7.1.4",
50 51 "ts-node": "^10.9.2",
@@ -3960,6 +3961,13 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
3960 3961 "dev": true,
3961 3962 "license": "MIT"
3962 3963 },
3964 + "node_modules/colorette": {
3965 + "version": "2.0.20",
3966 + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
3967 + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
3968 + "dev": true,
3969 + "license": "MIT"
3970 + },
3963 3971 "node_modules/combined-stream": {
3964 3972 "version": "1.0.8",
3965 3973 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -4308,6 +4316,16 @@ "time-zone": "^1.0.0"
4308 4316 },
4309 4317 "engines": {
4310 4318 "node": ">=6"
4319 + }
4320 + },
4321 + "node_modules/dateformat": {
4322 + "version": "4.6.3",
4323 + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
4324 + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
4325 + "dev": true,
4326 + "license": "MIT",
4327 + "engines": {
4328 + "node": "*"
4311 4329 }
4312 4330 },
4313 4331 "node_modules/debug": {
@@ -4918,6 +4936,13 @@ },
4918 4936 "engines": {
4919 4937 "node": ">=8.0.0"
4920 4938 }
4939 + },
4940 + "node_modules/fast-copy": {
4941 + "version": "4.0.3",
4942 + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.3.tgz",
4943 + "integrity": "sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw==",
4944 + "dev": true,
4945 + "license": "MIT"
4921 4946 },
4922 4947 "node_modules/fast-diff": {
4923 4948 "version": "1.3.0",
@@ -5505,6 +5530,13 @@ "engines": {
5505 5530 "node": ">= 0.4"
5506 5531 }
5507 5532 },
5533 + "node_modules/help-me": {
5534 + "version": "5.0.0",
5535 + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
5536 + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
5537 + "dev": true,
5538 + "license": "MIT"
5539 + },
5508 5540 "node_modules/home-or-tmp": {
5509 5541 "version": "2.0.0",
5510 5542 "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
@@ -5895,6 +5927,16 @@ "devOptional": true,
5895 5927 "license": "MIT",
5896 5928 "bin": {
5897 5929 "jiti": "lib/jiti-cli.mjs"
5930 + }
5931 + },
5932 + "node_modules/joycon": {
5933 + "version": "3.1.1",
5934 + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
5935 + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
5936 + "dev": true,
5937 + "license": "MIT",
5938 + "engines": {
5939 + "node": ">=10"
5898 5940 }
5899 5941 },
5900 5942 "node_modules/js-string-escape": {
@@ -7304,6 +7346,44 @@ "pino-std-serializers": "^7.0.0",
7304 7346 "process-warning": "^5.0.0"
7305 7347 }
7306 7348 },
7349 + "node_modules/pino-pretty": {
7350 + "version": "13.1.3",
7351 + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
7352 + "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
7353 + "dev": true,
7354 + "license": "MIT",
7355 + "dependencies": {
7356 + "colorette": "^2.0.7",
7357 + "dateformat": "^4.6.3",
7358 + "fast-copy": "^4.0.0",
7359 + "fast-safe-stringify": "^2.1.1",
7360 + "help-me": "^5.0.0",
7361 + "joycon": "^3.1.1",
7362 + "minimist": "^1.2.6",
7363 + "on-exit-leak-free": "^2.1.0",
7364 + "pino-abstract-transport": "^3.0.0",
7365 + "pump": "^3.0.0",
7366 + "secure-json-parse": "^4.0.0",
7367 + "sonic-boom": "^4.0.1",
7368 + "strip-json-comments": "^5.0.2"
7369 + },
7370 + "bin": {
7371 + "pino-pretty": "bin.js"
7372 + }
7373 + },
7374 + "node_modules/pino-pretty/node_modules/strip-json-comments": {
7375 + "version": "5.0.3",
7376 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
7377 + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
7378 + "dev": true,
7379 + "license": "MIT",
7380 + "engines": {
7381 + "node": ">=14.16"
7382 + },
7383 + "funding": {
7384 + "url": "https://github.com/sponsors/sindresorhus"
7385 + }
7386 + },
7307 7387 "node_modules/pino-std-serializers": {
7308 7388 "version": "7.1.0",
7309 7389 "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
@@ -8032,6 +8112,23 @@ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
8032 8112 "devOptional": true,
8033 8113 "license": "MIT",
8034 8114 "peer": true
8115 + },
8116 + "node_modules/secure-json-parse": {
8117 + "version": "4.1.0",
8118 + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
8119 + "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
8120 + "dev": true,
8121 + "funding": [
8122 + {
8123 + "type": "github",
8124 + "url": "https://github.com/sponsors/fastify"
8125 + },
8126 + {
8127 + "type": "opencollective",
8128 + "url": "https://opencollective.com/fastify"
8129 + }
8130 + ],
8131 + "license": "BSD-3-Clause"
8035 8132 },
8036 8133 "node_modules/semver": {
8037 8134 "version": "7.8.0",
api/package.json
@@ -55,6 +55,7 @@ "ava": "^6.4.1",
55 55 "cross-var": "^1.1.0",
56 56 "dotenv-cli": "^11.0.0",
57 57 "nodemon": "^3.1.14",
58 + "pino-pretty": "^13.1.3",
58 59 "prisma": "^7.5.0",
59 60 "supertest": "^7.1.4",
60 61 "ts-node": "^10.9.2",
api/src/createApp.ts
@@ -9,6 +9,8 @@ import moodRouter from '@app/routes/moods';
9 9 import { errorHandler } from '@app/middleware/errorHandler';
10 10 import { PrismaClient } from '@prisma/client';
11 11 import { bootWorkers, closeAllWorkers, closeAllQueues } from '@app/lib/queue';
12 + import pino from 'pino';
13 + import pinoHttp from 'pino-http';
12 14
13 15 export function createApp() {
14 16 const app = express();
@@ -22,10 +24,21 @@ }));
22 24
23 25 app.use(bodyParser.json());
24 26
25 - // Only use morgan in non-test environments
26 - if (process.env.NODE_ENV !== 'test') {
27 - app.use(morgan('combined'));
28 - }
27 + // Create Pino logger
28 + const logger = pino({
29 + level: process.env.LOG_LEVEL || 'info',
30 + transport: {
31 + target: 'pino-pretty', // Human-readable in development
32 + options: {
33 + colorize: true,
34 + singleLine: false,
35 + messageFormat: '{if levelLabel}{levelLabel} - {end}{msg}',
36 + },
37 + },
38 + });
39 +
40 + // Use pino-http for HTTP logging (better than Morgan for structured logs)
41 + app.use(pinoHttp({ logger }));
29 42
30 43 app.get('/', mainRouter);
31 44 app.use("/users", userRouter);