@gus-eip/loggers 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -0
- package/dist/cloudwatch.logger.d.ts +12 -0
- package/dist/cloudwatch.logger.js +79 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/interface.d.ts +4 -0
- package/dist/interface.js +2 -0
- package/dist/interfaces/logger.interface.d.ts +5 -0
- package/dist/interfaces/logger.interface.js +2 -0
- package/dist/module.d.ts +5 -0
- package/dist/module.js +35 -0
- package/dist/provider.d.ts +2 -0
- package/dist/provider.js +10 -0
- package/package.json +83 -0
package/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# @gus-eip/eip-loggers
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
`@gus-eip/eip-loggers` is a package designed to provide logging functionality for your Node.js applications. It offers integration with various logging services, including CloudWatchLogger.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
You can install the package via npm:
|
10
|
+
|
11
|
+
```bash
|
12
|
+
npm install @gus-eip/eip-loggers
|
13
|
+
```
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
To use the logger module in your application, follow these steps:
|
18
|
+
|
19
|
+
1. Import `LoggerModule` from `@gus-eip/eip-loggers` inside your module.
|
20
|
+
|
21
|
+
```javascript
|
22
|
+
import { LoggerModule } from '@gus-eip/eip-loggers';
|
23
|
+
```
|
24
|
+
|
25
|
+
2. Configure `LoggerModule` in your module by calling the `forRoot` method.
|
26
|
+
|
27
|
+
```javascript
|
28
|
+
LoggerModule.forRoot({
|
29
|
+
region: process.env.REGION,
|
30
|
+
logGroupName: process.env.LOGGER_LOG_GROUP_NAME,
|
31
|
+
options: 'CloudWatchLogger',
|
32
|
+
}),
|
33
|
+
```
|
34
|
+
|
35
|
+
Ensure you provide the necessary environment variables (`REGION` and `LOGGER_LOG_GROUP_NAME`) for configuration.
|
36
|
+
|
37
|
+
## Configuration Options
|
38
|
+
|
39
|
+
- `region`: The AWS region where your CloudWatch logs are located.
|
40
|
+
- `logGroupName`: The name of the log group where logs will be sent.
|
41
|
+
- `options`: The options for the logger. Currently, only `'CloudWatchLogger'` is supported.
|
42
|
+
|
43
|
+
## Example
|
44
|
+
|
45
|
+
```javascript
|
46
|
+
import { Module } from '@nestjs/common';
|
47
|
+
import { LoggerModule } from '@gus-eip/eip-loggers';
|
48
|
+
|
49
|
+
@Module({
|
50
|
+
imports: [
|
51
|
+
LoggerModule.forRoot({
|
52
|
+
region: process.env.REGION,
|
53
|
+
logGroupName: process.env.LOGGER_LOG_GROUP_NAME,
|
54
|
+
options: 'CloudWatchLogger',
|
55
|
+
}),
|
56
|
+
],
|
57
|
+
})
|
58
|
+
export class AppModule {}
|
59
|
+
```
|
60
|
+
|
61
|
+
## License
|
62
|
+
|
63
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
64
|
+
|
65
|
+
---
|
66
|
+
|
67
|
+
Feel free to customize this README according to your specific package features, usage guidelines, and licensing terms.
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { ILogger } from './interface';
|
2
|
+
export declare class CloudWatchLoggerService implements ILogger {
|
3
|
+
private logger;
|
4
|
+
private region;
|
5
|
+
private logGroupName;
|
6
|
+
constructor(region: string, logGroupName: string);
|
7
|
+
private defaultVersion;
|
8
|
+
private createCloudWatchTransport;
|
9
|
+
private logToCloudWatch;
|
10
|
+
log(requestedId: string, message: any, event: string, statusCode: number, details: any, brand: any, logStreamName: string): Promise<any>;
|
11
|
+
error(requestedId: string, message: any, event: string, errorCode: string, statusCode: number, details: any, brand: any, logStreamName: string): Promise<any>;
|
12
|
+
}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
7
|
+
};
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.CloudWatchLoggerService = void 0;
|
13
|
+
const common_1 = require("@nestjs/common");
|
14
|
+
const winston = require("winston");
|
15
|
+
const CloudWatchTransport = require("winston-aws-cloudwatch");
|
16
|
+
const AWS = require("aws-sdk");
|
17
|
+
let CloudWatchLoggerService = exports.CloudWatchLoggerService = class CloudWatchLoggerService {
|
18
|
+
constructor(region, logGroupName) {
|
19
|
+
this.defaultVersion = 'v1';
|
20
|
+
this.region = region;
|
21
|
+
this.logGroupName = logGroupName;
|
22
|
+
AWS.config.update({ region: this.region });
|
23
|
+
this.logger = winston.createLogger({
|
24
|
+
format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
|
25
|
+
transports: [new winston.transports.Console()],
|
26
|
+
});
|
27
|
+
}
|
28
|
+
async createCloudWatchTransport(logStreamName) {
|
29
|
+
return new CloudWatchTransport({
|
30
|
+
logGroupName: this.logGroupName,
|
31
|
+
logStreamName,
|
32
|
+
createLogGroup: true,
|
33
|
+
createLogStream: true,
|
34
|
+
awsRegion: this.region,
|
35
|
+
level: 'info',
|
36
|
+
});
|
37
|
+
}
|
38
|
+
async logToCloudWatch(level, logObject) {
|
39
|
+
this.logger[level]('', {
|
40
|
+
...logObject,
|
41
|
+
version: this.defaultVersion,
|
42
|
+
timestamp: new Date().toISOString(),
|
43
|
+
});
|
44
|
+
}
|
45
|
+
async log(requestedId, message, event, statusCode, details, brand, logStreamName) {
|
46
|
+
console.log(this.region, this.logGroupName);
|
47
|
+
const transport = await this.createCloudWatchTransport(logStreamName);
|
48
|
+
await this.logger.add(transport);
|
49
|
+
const logObject = {
|
50
|
+
requestedId,
|
51
|
+
message,
|
52
|
+
type: 'INFO',
|
53
|
+
event,
|
54
|
+
statusCode,
|
55
|
+
details,
|
56
|
+
brand,
|
57
|
+
};
|
58
|
+
await this.logToCloudWatch('info', logObject);
|
59
|
+
}
|
60
|
+
async error(requestedId, message, event, errorCode, statusCode, details, brand, logStreamName) {
|
61
|
+
const transport = await this.createCloudWatchTransport(logStreamName);
|
62
|
+
await this.logger.add(transport);
|
63
|
+
const logObject = {
|
64
|
+
requestedId,
|
65
|
+
message,
|
66
|
+
type: 'Error',
|
67
|
+
event,
|
68
|
+
errorCode,
|
69
|
+
statusCode,
|
70
|
+
details,
|
71
|
+
brand,
|
72
|
+
};
|
73
|
+
await this.logToCloudWatch('error', logObject);
|
74
|
+
}
|
75
|
+
};
|
76
|
+
exports.CloudWatchLoggerService = CloudWatchLoggerService = __decorate([
|
77
|
+
(0, common_1.Injectable)(),
|
78
|
+
__metadata("design:paramtypes", [String, String])
|
79
|
+
], CloudWatchLoggerService);
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./cloudwatch.logger"), exports);
|
18
|
+
__exportStar(require("./interface"), exports);
|
19
|
+
__exportStar(require("./module"), exports);
|
20
|
+
__exportStar(require("./provider"), exports);
|
@@ -0,0 +1,4 @@
|
|
1
|
+
export interface ILogger {
|
2
|
+
log(requestedId: string, logMessage: any, event: string, statusCode: number, details: any, brand: any, logStreamName: string): Promise<any>;
|
3
|
+
error(requestedId: string, errorMessage: any, event: string, errorCode: string, statusCode: number, details: any, brand: any, logStreamName: string): Promise<any>;
|
4
|
+
}
|
package/dist/module.d.ts
ADDED
package/dist/module.js
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
7
|
+
};
|
8
|
+
var LoggerModule_1;
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
exports.LoggerModule = void 0;
|
11
|
+
const common_1 = require("@nestjs/common");
|
12
|
+
const cloudwatch_logger_1 = require("./cloudwatch.logger");
|
13
|
+
let LoggerModule = exports.LoggerModule = LoggerModule_1 = class LoggerModule {
|
14
|
+
static forRoot(params) {
|
15
|
+
const cloudwatchProvider = {
|
16
|
+
provide: params.options,
|
17
|
+
useClass: cloudwatch_logger_1.CloudWatchLoggerService,
|
18
|
+
};
|
19
|
+
const cloudwatchProviders = {
|
20
|
+
provide: params.options,
|
21
|
+
useFactory: () => new cloudwatch_logger_1.CloudWatchLoggerService(params.region, params.logGroupName),
|
22
|
+
};
|
23
|
+
return {
|
24
|
+
module: LoggerModule_1,
|
25
|
+
exports: [cloudwatchProvider, cloudwatchProviders],
|
26
|
+
providers: [
|
27
|
+
cloudwatchProvider,
|
28
|
+
cloudwatchProviders,
|
29
|
+
],
|
30
|
+
};
|
31
|
+
}
|
32
|
+
};
|
33
|
+
exports.LoggerModule = LoggerModule = LoggerModule_1 = __decorate([
|
34
|
+
(0, common_1.Module)({})
|
35
|
+
], LoggerModule);
|
package/dist/provider.js
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.LoggerProviders = void 0;
|
4
|
+
const cloudwatch_logger_1 = require("./cloudwatch.logger");
|
5
|
+
exports.LoggerProviders = [
|
6
|
+
{
|
7
|
+
provide: 'CloudWatchLogger',
|
8
|
+
useClass: cloudwatch_logger_1.CloudWatchLoggerService,
|
9
|
+
},
|
10
|
+
];
|
package/package.json
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
{
|
2
|
+
"name": "@gus-eip/loggers",
|
3
|
+
"version": "1.0.1",
|
4
|
+
"description": "",
|
5
|
+
"author": "gus",
|
6
|
+
"readmeFilename": "README.md",
|
7
|
+
"main": "dist/index.js",
|
8
|
+
"files": [
|
9
|
+
"dist/**/*",
|
10
|
+
"*.md"
|
11
|
+
],
|
12
|
+
"scripts": {
|
13
|
+
"start:dev": "tsc -w",
|
14
|
+
"build": "tsc",
|
15
|
+
"prepare": "npm run build",
|
16
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
17
|
+
"lint": "tslint -p tsconfig.json -c tslint.json",
|
18
|
+
"test": "node --experimental-vm-modules ./node_modules/.bin/jest",
|
19
|
+
"test:watch": "jest --watch",
|
20
|
+
"test:cov": "jest --coverage",
|
21
|
+
"test:e2e": "jest --config ./test/jest-e2e.json"
|
22
|
+
},
|
23
|
+
"keywords": [
|
24
|
+
"nestjs",
|
25
|
+
"nodejs",
|
26
|
+
"javascript",
|
27
|
+
"typescript",
|
28
|
+
"cashify",
|
29
|
+
"eip-loggers",
|
30
|
+
"currency-exchange",
|
31
|
+
"conversion",
|
32
|
+
"money",
|
33
|
+
"exchange-rates"
|
34
|
+
],
|
35
|
+
"publishConfig": {
|
36
|
+
"access": "public"
|
37
|
+
},
|
38
|
+
"dependencies": {
|
39
|
+
"aws-sdk": "^2.1590.0",
|
40
|
+
"winston": "^3.13.0",
|
41
|
+
"winston-aws-cloudwatch": "^3.0.0"
|
42
|
+
},
|
43
|
+
"devDependencies": {
|
44
|
+
"@nestjs/common": "^10.0.2",
|
45
|
+
"@nestjs/core": "^10.0.2",
|
46
|
+
"@nestjs/platform-express": "^10.0.2",
|
47
|
+
"@nestjs/testing": "10.0.2",
|
48
|
+
"@types/express": "4.17.17",
|
49
|
+
"@types/jest": "29.5.2",
|
50
|
+
"@types/node": "20.3.1",
|
51
|
+
"@types/supertest": "2.0.12",
|
52
|
+
"@typescript-eslint/eslint-plugin": "^5.60.0",
|
53
|
+
"@typescript-eslint/parser": "^5.60.0",
|
54
|
+
"eslint": "^8.43.0",
|
55
|
+
"eslint-config-prettier": "^8.8.0",
|
56
|
+
"eslint-plugin-prettier": "^4.2.1",
|
57
|
+
"jest": "29.5.0",
|
58
|
+
"prettier": "2.8.8",
|
59
|
+
"reflect-metadata": "^0.1.13",
|
60
|
+
"rxjs": "^7.8.1",
|
61
|
+
"supertest": "6.3.3",
|
62
|
+
"ts-jest": "29.1.0",
|
63
|
+
"ts-node": "10.9.1",
|
64
|
+
"tsc-watch": "6.0.4",
|
65
|
+
"tsconfig-paths": "4.2.0",
|
66
|
+
"tslint": "5.20.1",
|
67
|
+
"typescript": "5.1.3"
|
68
|
+
},
|
69
|
+
"jest": {
|
70
|
+
"moduleFileExtensions": [
|
71
|
+
"js",
|
72
|
+
"json",
|
73
|
+
"ts"
|
74
|
+
],
|
75
|
+
"rootDir": "src",
|
76
|
+
"testRegex": ".spec.ts$",
|
77
|
+
"transform": {
|
78
|
+
"^.+\\.(t|j)s$": "ts-jest"
|
79
|
+
},
|
80
|
+
"coverageDirectory": "../coverage",
|
81
|
+
"testEnvironment": "node"
|
82
|
+
}
|
83
|
+
}
|