eletrotupi / tcc/ commit / d3859d7

api: pull pino-pretty for better logging

Pedro Lucas Porcellis porcellis@eletrotupi.com · 5 months ago d3859d7a3aea712c026e40c147d5359d66f841c7 Browse files
Parents 2cac61a
Changed files
3
Additions
+115
Deletions
-4
api/package-lock.json
1 1
{
2 2
  "name": "orbit-api",
3 3
  "version": "0.0.0",
4 4
  "lockfileVersion": 3,
5 5
  "requires": true,
43 43
        "@types/node": "^25.5.2",
44 44
        "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",
51 52
        "tsc-alias": "^1.8.16",
52 53
        "tsconfig-paths": "^4.2.0",
3958 3959
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
3959 3960
      "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",
3966 3974
      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
3967 3975
      "dev": true,
4306 4314
      "dependencies": {
4307 4315
        "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": {
4314 4332
      "version": "4.4.3",
4315 4333
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
4916 4934
        "pure-rand": "^6.1.0"
4917 4935
      },
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",
4924 4949
      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
4925 4950
      "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
5503 5528
      },
5504 5529
      "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",
5511 5543
      "integrity": "sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg==",
5512 5544
      "dev": true,
5893 5925
      "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
5894 5926
      "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": {
5901 5943
      "version": "1.0.1",
5902 5944
      "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
7302 7344
        "pino": "^10.0.0",
7303 7345
        "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",
7310 7390
      "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==",
7311 7391
      "license": "MIT"
8030 8110
      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
8031 8111
      "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",
8038 8135
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz",
8039 8136
      "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
9543 9640
        "zod": "^3.25.0 || ^4.0.0"
9544 9641
      }
9545 9642
    }
9546 9643
  }
9547 9644
}
api/package.json modified+1
api/package.json
1 1
{
2 2
  "name": "orbit-api",
3 3
  "version": "0.0.0",
4 4
  "description": "",
5 5
  "license": "ISC",
53 53
    "@types/node": "^25.5.2",
54 54
    "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",
61 62
    "tsc-alias": "^1.8.16",
62 63
    "tsconfig-paths": "^4.2.0",
63 64
    "tsx": "^4.21.0",
64 65
    "typescript": "^6.0.2"
65 66
  }
66 67
}
api/src/createApp.ts modified+17 -4
api/src/createApp.ts
1 1
import express from 'express';
2 2
import cors from 'cors';
3 3
import bodyParser from 'body-parser';
4 4
import morgan from 'morgan';
5 5
import mainRouter from '@app/routes/main';
7 7
import authRouter from '@app/routes/auth';
8 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();
15 17
  bootWorkers();
16 18

20 22
    credentials: true
21 23
  }));
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);
32 45
  app.use("/auth", authRouter);
33 46
  app.use("/moods", moodRouter);
42 55

43 56
const shutdown = async () => {
44 57
  await Promise.all([closeAllWorkers(), closeAllQueues()]);
45 58
  process.exit(0);
46 59
};