feat: init
This commit is contained in:
3
packages/logger/.eslintignore
Normal file
3
packages/logger/.eslintignore
Normal file
@@ -0,0 +1,3 @@
|
||||
build/*
|
||||
dist/*
|
||||
out/*
|
||||
4
packages/logger/.eslintrc.js
Normal file
4
packages/logger/.eslintrc.js
Normal file
@@ -0,0 +1,4 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
extends: ["@plane/eslint-config/library.js"],
|
||||
};
|
||||
6
packages/logger/.prettierignore
Normal file
6
packages/logger/.prettierignore
Normal file
@@ -0,0 +1,6 @@
|
||||
.next
|
||||
.vercel
|
||||
.tubro
|
||||
out/
|
||||
dist/
|
||||
build/
|
||||
5
packages/logger/.prettierrc
Normal file
5
packages/logger/.prettierrc
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"printWidth": 120,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "es5"
|
||||
}
|
||||
70
packages/logger/README.md
Normal file
70
packages/logger/README.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Logger Package
|
||||
|
||||
This package provides a logger and a request logger utility built using [Winston](https://github.com/winstonjs/winston). It offers customizable log levels using env and supports structured logging for general application logs and HTTP requests.
|
||||
|
||||
## Features.
|
||||
|
||||
- Dynamic log level configuration using env.
|
||||
- Pre-configured winston logger for general usage (`logger`).
|
||||
- Request logger middleware that logs incoming request
|
||||
|
||||
## Usage
|
||||
|
||||
### Adding as a package
|
||||
|
||||
Add this package as a dependency in package.json
|
||||
|
||||
```typescript
|
||||
dependency: {
|
||||
...
|
||||
@plane/logger":"*",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### Importing the Logger
|
||||
|
||||
```typescript
|
||||
import { logger, requestLogger } from "@plane/logger";
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
### `logger`: General Logger
|
||||
|
||||
Use this for general application logs.
|
||||
|
||||
```typescript
|
||||
logger.info("This is an info log");
|
||||
logger.warn("This is a warning");
|
||||
logger.error("This is an error");
|
||||
```
|
||||
|
||||
### `requestLogger`: Request Logger Middleware
|
||||
|
||||
Use this as a middleware for incoming requests
|
||||
|
||||
```typescript
|
||||
const app = express();
|
||||
app.use(requestLogger);
|
||||
```
|
||||
|
||||
## Available Log Levels
|
||||
|
||||
- `error`
|
||||
- `warn`
|
||||
- `info` (default)
|
||||
- `http`
|
||||
- `verbose`
|
||||
- `debug`
|
||||
- `silly`
|
||||
|
||||
## Log file
|
||||
|
||||
- Log files are stored in logs folder of current working directory. Error logs are stored in files with format `error-%DATE%.log` and combined logs are stored with format `combined-%DATE%.log`.
|
||||
- Log files have a 7 day rotation period defined.
|
||||
|
||||
## Configuration
|
||||
|
||||
- By default, the log level is set to `info`.
|
||||
- You can specify a log level by adding a LOG_LEVEL in .env.
|
||||
39
packages/logger/package.json
Normal file
39
packages/logger/package.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"name": "@plane/logger",
|
||||
"version": "1.1.0",
|
||||
"license": "AGPL-3.0",
|
||||
"description": "Logger shared across multiple apps internally",
|
||||
"private": true,
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./dist/index.mjs",
|
||||
"require": "./dist/index.js"
|
||||
},
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsdown",
|
||||
"dev": "tsdown --watch",
|
||||
"check:lint": "eslint . --max-warnings 0",
|
||||
"check:types": "tsc --noEmit",
|
||||
"check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"",
|
||||
"fix:lint": "eslint . --fix",
|
||||
"fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"",
|
||||
"clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist"
|
||||
},
|
||||
"dependencies": {
|
||||
"express-winston": "^4.2.0",
|
||||
"winston": "^3.17.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@plane/eslint-config": "workspace:*",
|
||||
"@plane/typescript-config": "workspace:*",
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/node": "catalog:",
|
||||
"tsdown": "catalog:",
|
||||
"typescript": "catalog:"
|
||||
},
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.mjs",
|
||||
"types": "./dist/index.d.ts"
|
||||
}
|
||||
14
packages/logger/src/config.ts
Normal file
14
packages/logger/src/config.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { createLogger, format, LoggerOptions, transports } from "winston";
|
||||
|
||||
export const loggerConfig: LoggerOptions = {
|
||||
level: process.env.LOG_LEVEL || "info",
|
||||
format: format.combine(
|
||||
format.timestamp({
|
||||
format: "YYYY-MM-DD HH:mm:ss:ms",
|
||||
}),
|
||||
format.json()
|
||||
),
|
||||
transports: [new transports.Console()],
|
||||
};
|
||||
|
||||
export const logger = createLogger(loggerConfig);
|
||||
2
packages/logger/src/index.ts
Normal file
2
packages/logger/src/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export * from "./config";
|
||||
export * from "./middleware";
|
||||
11
packages/logger/src/middleware.ts
Normal file
11
packages/logger/src/middleware.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import type { RequestHandler } from "express";
|
||||
import expressWinston from "express-winston";
|
||||
import { transports } from "winston";
|
||||
import { loggerConfig } from "./config";
|
||||
|
||||
export const loggerMiddleware: RequestHandler = expressWinston.logger({
|
||||
...loggerConfig,
|
||||
transports: [new transports.Console()],
|
||||
msg: "{{req.method}} {{req.url}} {{res.statusCode}} {{res.responseTime}}ms",
|
||||
expressFormat: true,
|
||||
});
|
||||
19
packages/logger/tsconfig.json
Normal file
19
packages/logger/tsconfig.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "@plane/typescript-config/base.json",
|
||||
"compilerOptions": {
|
||||
"module": "ESNext",
|
||||
"target": "ESNext",
|
||||
"moduleResolution": "node",
|
||||
"esModuleInterop": true,
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
},
|
||||
"experimentalDecorators": true,
|
||||
"sourceMap": true
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
11
packages/logger/tsdown.config.ts
Normal file
11
packages/logger/tsdown.config.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { defineConfig } from "tsdown";
|
||||
|
||||
export default defineConfig({
|
||||
entry: ["src/index.ts"],
|
||||
outDir: "dist",
|
||||
format: ["esm", "cjs"],
|
||||
exports: true,
|
||||
dts: true,
|
||||
clean: true,
|
||||
sourcemap: true,
|
||||
});
|
||||
Reference in New Issue
Block a user