@akms/logger-winston 0.4.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/LICENSE.md +11 -0
- package/README.md +64 -0
- package/dist/defs.d.ts +25 -0
- package/dist/defs.d.ts.map +1 -0
- package/dist/defs.js +28 -0
- package/dist/defs.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -0
- package/dist/winston-formats.d.ts +4 -0
- package/dist/winston-formats.d.ts.map +1 -0
- package/dist/winston-formats.js +153 -0
- package/dist/winston-formats.js.map +1 -0
- package/package.json +39 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## MIT License
|
|
2
|
+
|
|
3
|
+
The MIT License (MIT)
|
|
4
|
+
|
|
5
|
+
Copyright Β© 2026 Alkemic Studio Inc.
|
|
6
|
+
|
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
8
|
+
|
|
9
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
|
+
|
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# @akms/logger-winston
|
|
2
|
+
|
|
3
|
+
π§ Sorry folks! This library is currently built for our internal services only.
|
|
4
|
+
But don't worry β we're planning to release a public version in the future! π
|
|
5
|
+
|
|
6
|
+
A Winston-based logger wrapper with environment-aware configuration, sensitive data masking, and daily log rotation.
|
|
7
|
+
|
|
8
|
+
## π¦ Installation
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @akms/logger-winston
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## π Usage
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { createLogger } from "@akms/logger-winston";
|
|
18
|
+
|
|
19
|
+
const logger = createLogger();
|
|
20
|
+
|
|
21
|
+
logger.info("Hello world");
|
|
22
|
+
logger.error("Something went wrong", { userId: 123 });
|
|
23
|
+
logger.debug("Debug info", { context: "MyService", data: { foo: "bar" } });
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## βοΈ Environment Variables
|
|
27
|
+
|
|
28
|
+
| Variable | Description | Default |
|
|
29
|
+
|----------|-------------|---------|
|
|
30
|
+
| `LOG_LEVEL` | Log level (`fatal`, `error`, `warn`, `info`, `debug`, `verbose`, `trace`) | `info` (prod), `debug` (dev) |
|
|
31
|
+
| `LOG_SENSITIVE_KEYS` | Comma-separated keys to mask (e.g., `password,token,apiKey`) | - |
|
|
32
|
+
| `LOG_USE_SINGLE_LINE_OBJ` | Output objects in single line (`true`/`false`) | `false` |
|
|
33
|
+
| `LOG_USE_FILE` | Enable file logging (`true`/`false`) | `false` |
|
|
34
|
+
| `SERVER_ENV` | Server environment (`development`, `production`, `test_production`) | - |
|
|
35
|
+
|
|
36
|
+
## π Log Levels
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
none: 0 # No logging
|
|
40
|
+
fatal: 1 # Critical errors
|
|
41
|
+
error: 2 # Errors
|
|
42
|
+
warn: 3 # Warnings
|
|
43
|
+
info: 4 # Information (default for production)
|
|
44
|
+
debug: 5 # Debug (default for development)
|
|
45
|
+
verbose: 6 # Verbose/Trace
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## β¨ Features
|
|
49
|
+
|
|
50
|
+
- π₯οΈ **Console & File Transports** - Console logging with colors, optional daily rotating file logs
|
|
51
|
+
- π **Sensitive Data Masking** - Automatically redacts values for specified keys (recursive)
|
|
52
|
+
- π·οΈ **Context Support** - Add `context` field for service/module identification
|
|
53
|
+
- π **Environment-Aware** - Auto-adjusts log level based on `SERVER_ENV`
|
|
54
|
+
|
|
55
|
+
## π File Logging
|
|
56
|
+
|
|
57
|
+
When `LOG_USE_FILE=true`, logs are written to `./logs/YYYY-MM-DD-HH.log` with:
|
|
58
|
+
- β° Hourly rotation
|
|
59
|
+
- π¦ Gzip compression
|
|
60
|
+
- ποΈ 30-day retention
|
|
61
|
+
|
|
62
|
+
## π License
|
|
63
|
+
|
|
64
|
+
MIT
|
package/dist/defs.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import winston from "winston";
|
|
2
|
+
export type Logger = winston.Logger;
|
|
3
|
+
export type LoggerOptions = winston.LoggerOptions;
|
|
4
|
+
export declare const logLevels: {
|
|
5
|
+
[label: string]: number;
|
|
6
|
+
};
|
|
7
|
+
export declare enum ServerEnv {
|
|
8
|
+
DEV = "development",
|
|
9
|
+
PROD = "production",
|
|
10
|
+
TEST_PROD = "test_production"
|
|
11
|
+
}
|
|
12
|
+
export declare const customLevels: {
|
|
13
|
+
levels: {
|
|
14
|
+
[label: string]: number;
|
|
15
|
+
};
|
|
16
|
+
colors: {
|
|
17
|
+
fatal: string;
|
|
18
|
+
error: string;
|
|
19
|
+
warn: string;
|
|
20
|
+
info: string;
|
|
21
|
+
debug: string;
|
|
22
|
+
verbose: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=defs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defs.d.ts","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AACpC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAElD,eAAO,MAAM,SAAS,EAAC;IACnB,CAAC,KAAK,EAAC,MAAM,GAAE,MAAM,CAAA;CASxB,CAAC;AAEF,oBAAY,SAAS;IACjB,GAAG,gBAAgB;IACnB,IAAI,eAAe;IACnB,SAAS,oBAAoB;CAChC;AAGD,eAAO,MAAM,YAAY;;;;;;;;;;;;CAUxB,CAAC"}
|
package/dist/defs.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const logLevels = {
|
|
2
|
+
none: 0,
|
|
3
|
+
fatal: 1,
|
|
4
|
+
error: 2,
|
|
5
|
+
warn: 3,
|
|
6
|
+
info: 4,
|
|
7
|
+
debug: 5,
|
|
8
|
+
verbose: 6,
|
|
9
|
+
};
|
|
10
|
+
export var ServerEnv;
|
|
11
|
+
(function (ServerEnv) {
|
|
12
|
+
ServerEnv["DEV"] = "development";
|
|
13
|
+
ServerEnv["PROD"] = "production";
|
|
14
|
+
ServerEnv["TEST_PROD"] = "test_production";
|
|
15
|
+
})(ServerEnv || (ServerEnv = {}));
|
|
16
|
+
// Winston 컀μ€ν
λ 벨 μ μ
|
|
17
|
+
export const customLevels = {
|
|
18
|
+
levels: logLevels,
|
|
19
|
+
colors: {
|
|
20
|
+
fatal: 'red',
|
|
21
|
+
error: 'red',
|
|
22
|
+
warn: 'yellow',
|
|
23
|
+
info: 'green',
|
|
24
|
+
debug: 'blue',
|
|
25
|
+
verbose: 'cyan'
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=defs.js.map
|
package/dist/defs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,SAAS,GAElB;IACA,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;CACb,CAAC;AAEF,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACjB,gCAAmB,CAAA;IACnB,gCAAmB,CAAA;IACnB,0CAA6B,CAAA;AACjC,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,oBAAoB;AACpB,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE;QACJ,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;KAClB;CACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAwB,MAAM,QAAQ,CAAC;AAGrE,eAAO,MAAM,gBAAgB,QAAM,aA2FlC,CAAA;AAED,eAAO,MAAM,YAAY,QAAM,MAG9B,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import winston from "winston";
|
|
2
|
+
import winstonDailyRotateFile from "winston-daily-rotate-file";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import { logLevels, ServerEnv } from "./defs.js";
|
|
6
|
+
import { consoleTextFormat, fileTextFormat } from "./winston-formats.js";
|
|
7
|
+
export const getLoggerOptions = () => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
// [ENVIRONMENT SETTINGS]
|
|
10
|
+
let envSensitiveKeys = [];
|
|
11
|
+
if (process.env.LOG_SENSITIVE_KEYS != null) {
|
|
12
|
+
envSensitiveKeys = process.env.LOG_SENSITIVE_KEYS.split(",")
|
|
13
|
+
.map(x => {
|
|
14
|
+
return x.trim();
|
|
15
|
+
})
|
|
16
|
+
.filter(x => {
|
|
17
|
+
return x.length > 0;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
let envUseDataSingleLine = false;
|
|
21
|
+
if (((_a = process.env.LOG_USE_SINGLE_LINE_OBJ) === null || _a === void 0 ? void 0 : _a.toLowerCase()) == "true") {
|
|
22
|
+
envUseDataSingleLine = true;
|
|
23
|
+
}
|
|
24
|
+
let envLogLevel = null;
|
|
25
|
+
if (process.env.LOG_LEVEL) {
|
|
26
|
+
let _logLevel = process.env.LOG_LEVEL.toLowerCase();
|
|
27
|
+
if (_logLevel == "trace") {
|
|
28
|
+
_logLevel = "verbose";
|
|
29
|
+
}
|
|
30
|
+
const key = Object.keys(logLevels).find(x => x == _logLevel);
|
|
31
|
+
if (key != null) {
|
|
32
|
+
envLogLevel = logLevels[key];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
let envUseFileLog = false;
|
|
36
|
+
if (((_b = process.env.LOG_USE_FILE) === null || _b === void 0 ? void 0 : _b.toLowerCase()) == "true") {
|
|
37
|
+
envUseFileLog = true;
|
|
38
|
+
}
|
|
39
|
+
//[LOGGER OPTIONS]
|
|
40
|
+
let options = {};
|
|
41
|
+
//[TRANSPORTS]
|
|
42
|
+
const transports = [];
|
|
43
|
+
//TRANSPORTS CONSOLE
|
|
44
|
+
const consoleTransport = new winston.transports.Console({
|
|
45
|
+
format: consoleTextFormat,
|
|
46
|
+
});
|
|
47
|
+
transports.push(consoleTransport);
|
|
48
|
+
//TRANSPORTS FILE
|
|
49
|
+
if (envUseFileLog == true) {
|
|
50
|
+
try {
|
|
51
|
+
const dirPath = path.resolve(process.cwd(), "logs");
|
|
52
|
+
if (fs.existsSync(dirPath) == false) {
|
|
53
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
const logPath = path.resolve(dirPath, "%DATE%.log");
|
|
56
|
+
const fileTransport = new winstonDailyRotateFile({
|
|
57
|
+
format: fileTextFormat,
|
|
58
|
+
filename: logPath,
|
|
59
|
+
datePattern: "YYYY-MM-DD-HH",
|
|
60
|
+
zippedArchive: true,
|
|
61
|
+
maxFiles: 30
|
|
62
|
+
});
|
|
63
|
+
transports.push(fileTransport);
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
console.error("error on adding file transport", e);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
options.transports = transports;
|
|
70
|
+
//[LOG LEVEL]
|
|
71
|
+
let logLevelNo = logLevels.info;
|
|
72
|
+
if (envLogLevel != null) {
|
|
73
|
+
logLevelNo = envLogLevel;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
if (process.env.SERVER_ENV == ServerEnv.DEV) {
|
|
77
|
+
logLevelNo = logLevels.debug;
|
|
78
|
+
}
|
|
79
|
+
else if (process.env.SERVER_ENV == ServerEnv.TEST_PROD) {
|
|
80
|
+
logLevelNo = logLevels.debug;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const logLevel = Object.keys(logLevels).find(key => logLevels[key] == logLevelNo);
|
|
84
|
+
options.level = logLevel;
|
|
85
|
+
options.levels = logLevels;
|
|
86
|
+
return options;
|
|
87
|
+
};
|
|
88
|
+
export const createLogger = () => {
|
|
89
|
+
const winstonLogger = winston.createLogger(getLoggerOptions());
|
|
90
|
+
return winstonLogger;
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"winston-formats.d.ts","sourceRoot":"","sources":["../src/winston-formats.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAuJ9B,eAAO,MAAM,iBAAiB,wBAc7B,CAAC;AAEF,eAAO,MAAM,cAAc,wBAc1B,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import winston from "winston";
|
|
13
|
+
import { SPLAT, LEVEL, MESSAGE } from "triple-beam";
|
|
14
|
+
import { customLevels } from "./defs.js";
|
|
15
|
+
//[FUNCTIONS]
|
|
16
|
+
const getPlainTextFormat = (args) => {
|
|
17
|
+
var _a, _b, _c;
|
|
18
|
+
const { info, useColor } = args;
|
|
19
|
+
// [ENVIRONMENT SETTINGS]
|
|
20
|
+
let envSensitiveKeys = [];
|
|
21
|
+
if (process.env.LOG_SENSITIVE_KEYS != null) {
|
|
22
|
+
envSensitiveKeys = process.env.LOG_SENSITIVE_KEYS.split(",")
|
|
23
|
+
.map(x => {
|
|
24
|
+
return x.trim();
|
|
25
|
+
})
|
|
26
|
+
.filter(x => {
|
|
27
|
+
return x.length > 0;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
let envUseDataSingleLine = false;
|
|
31
|
+
if (((_a = process.env.LOG_USE_SINGLE_LINE_OBJ) === null || _a === void 0 ? void 0 : _a.toLowerCase()) == "true") {
|
|
32
|
+
envUseDataSingleLine = true;
|
|
33
|
+
}
|
|
34
|
+
const colorizer = winston.format.colorize();
|
|
35
|
+
winston.addColors(customLevels.colors);
|
|
36
|
+
const { timestamp, ms, level, message, metadata, [LEVEL]: _level, [MESSAGE]: _message, [SPLAT]: _splat, } = info;
|
|
37
|
+
const _d = metadata, { context, stack } = _d, meta = __rest(_d, ["context", "stack"]);
|
|
38
|
+
// μ¬κ·μ μΌλ‘ λ―Όκ° λ°μ΄ν°λ₯Ό λ§μ€νΉνλ ν¨μ
|
|
39
|
+
const maskSensitiveData = (obj) => {
|
|
40
|
+
if (obj === null || obj === undefined) {
|
|
41
|
+
return obj;
|
|
42
|
+
}
|
|
43
|
+
if (Array.isArray(obj)) {
|
|
44
|
+
return obj.map(item => maskSensitiveData(item));
|
|
45
|
+
}
|
|
46
|
+
if (typeof obj === 'object') {
|
|
47
|
+
const maskedObj = {};
|
|
48
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
49
|
+
if (envSensitiveKeys.includes(key)) {
|
|
50
|
+
maskedObj[key] = "[REDACTED]";
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
maskedObj[key] = maskSensitiveData(value);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return maskedObj;
|
|
57
|
+
}
|
|
58
|
+
return obj;
|
|
59
|
+
};
|
|
60
|
+
let format = "";
|
|
61
|
+
try {
|
|
62
|
+
format += `${info.timestamp}`;
|
|
63
|
+
if (useColor == true) {
|
|
64
|
+
format += ` [${colorizer.colorize(info.level, `${info.level}`)}]`;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
format += ` [${info.level}]`;
|
|
68
|
+
}
|
|
69
|
+
if (context && typeof context == "string") {
|
|
70
|
+
format += ` [${context}]`;
|
|
71
|
+
}
|
|
72
|
+
if (info.message) {
|
|
73
|
+
format += ` ${info.message}`;
|
|
74
|
+
}
|
|
75
|
+
if (Object.keys(meta).length > 0) {
|
|
76
|
+
const metadatas = Object.entries(meta);
|
|
77
|
+
let text = "";
|
|
78
|
+
for (let [key, value] of metadatas) {
|
|
79
|
+
// λ―Όκ° λ°μ΄ν° λ§μ€νΉ μ μ©
|
|
80
|
+
let _value = value;
|
|
81
|
+
if (envSensitiveKeys.includes(key) == true) {
|
|
82
|
+
_value = "[REDACTED]";
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
_value = maskSensitiveData(value);
|
|
86
|
+
}
|
|
87
|
+
let jText;
|
|
88
|
+
switch (typeof _value) {
|
|
89
|
+
case "string":
|
|
90
|
+
text += `\n- ${key}: ${_value.trim()}`;
|
|
91
|
+
break;
|
|
92
|
+
case "number":
|
|
93
|
+
case "boolean":
|
|
94
|
+
case "bigint":
|
|
95
|
+
text += `\n- ${key}: ${_value}`;
|
|
96
|
+
break;
|
|
97
|
+
case "undefined":
|
|
98
|
+
text += `\n- ${key}: undefined`;
|
|
99
|
+
break;
|
|
100
|
+
case "function":
|
|
101
|
+
text += `\n- ${key}: function`;
|
|
102
|
+
break;
|
|
103
|
+
case "object":
|
|
104
|
+
if (_value == null) {
|
|
105
|
+
text += `\n- ${key}: null`;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// λ°°μ΄κ³Ό κ°μ²΄ λͺ¨λ λ§μ€νΉλ λ°μ΄ν°λ‘ JSON μ§λ ¬ν
|
|
109
|
+
if (envUseDataSingleLine == true) {
|
|
110
|
+
jText = (_b = JSON.stringify(_value)) !== null && _b !== void 0 ? _b : "";
|
|
111
|
+
text += `\n- ${key}: ${jText}`;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
jText = (_c = JSON.stringify(_value, null, 4)) !== null && _c !== void 0 ? _c : "";
|
|
115
|
+
text += `\n- ${key}:\n${jText}`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
case "symbol":
|
|
120
|
+
default:
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
format += `${text}`;
|
|
125
|
+
}
|
|
126
|
+
if (stack) {
|
|
127
|
+
format += `\n${stack}`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
console.error("error on getPlainTextFormat", e);
|
|
132
|
+
}
|
|
133
|
+
return format;
|
|
134
|
+
};
|
|
135
|
+
export const consoleTextFormat = winston.format.combine(winston.format.prettyPrint(), winston.format.metadata(), winston.format.errors({ stack: true }), winston.format.timestamp({
|
|
136
|
+
format: "YYYY-MM-DD HH:mm:ss",
|
|
137
|
+
alias: "timestamp"
|
|
138
|
+
}), winston.format.printf(info => {
|
|
139
|
+
return getPlainTextFormat({
|
|
140
|
+
info,
|
|
141
|
+
useColor: true,
|
|
142
|
+
});
|
|
143
|
+
}));
|
|
144
|
+
export const fileTextFormat = winston.format.combine(winston.format.prettyPrint(), winston.format.metadata(), winston.format.errors({ stack: true, }), winston.format.timestamp({
|
|
145
|
+
format: "YYYY-MM-DD HH:mm:ss",
|
|
146
|
+
alias: "timestamp"
|
|
147
|
+
}), winston.format.printf((info) => {
|
|
148
|
+
return getPlainTextFormat({
|
|
149
|
+
info,
|
|
150
|
+
useColor: false,
|
|
151
|
+
});
|
|
152
|
+
}));
|
|
153
|
+
//# sourceMappingURL=winston-formats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"winston-formats.js","sourceRoot":"","sources":["../src/winston-formats.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@akms/logger-winston",
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"clean": "rimraf ./dist",
|
|
14
|
+
"build": "npm run clean && tsc -p ./tsconfig.json && tsc-alias -p ./tsconfig.json",
|
|
15
|
+
"watch": "npm run clean && tsc-watch -p ./tsconfig.json --onCompilationComplete \"tsc-alias -p ./tsconfig.json\"",
|
|
16
|
+
"test": "npm run test:prod && npm run test:dev && npm run test:verbose && npm run test:winston-features",
|
|
17
|
+
"test:prod": "cross-env SERVER_ENV=production tsx tests/basic.test.ts",
|
|
18
|
+
"test:dev": "cross-env SERVER_ENV=development tsx tests/basic.test.ts",
|
|
19
|
+
"test:verbose": "cross-env SERVER_ENV=production LOG_LEVEL=verbose tsx tests/basic.test.ts",
|
|
20
|
+
"test:winston-features": "cross-env LOG_USE_FILE=true LOG_SENSITIVE_KEYS=password,secret,token,apiKey LOG_USE_SINGLE_LINE_OBJ=true tsx tests/winston-features.test.ts"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^22.15.3",
|
|
24
|
+
"winston": "^3.17.0",
|
|
25
|
+
"winston-daily-rotate-file": "^5.0.0",
|
|
26
|
+
"cross-env": "^10.0.0",
|
|
27
|
+
"rimraf": "^6.0.1",
|
|
28
|
+
"ts-node": "^10.9.2",
|
|
29
|
+
"tsc-alias": "^1.8.15",
|
|
30
|
+
"tsc-watch": "^6.2.1",
|
|
31
|
+
"tsx": "^4.20.6",
|
|
32
|
+
"typescript": "^5.8.3"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"winston": "^3.17.0",
|
|
36
|
+
"winston-daily-rotate-file": "^5.0.0"
|
|
37
|
+
},
|
|
38
|
+
"license": "MIT"
|
|
39
|
+
}
|