@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 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
@@ -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"}
@@ -0,0 +1,4 @@
1
+ import { Logger, LoggerOptions } from "./defs.js";
2
+ export declare const getLoggerOptions: () => LoggerOptions;
3
+ export declare const createLogger: () => Logger;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ import winston from "winston";
2
+ export declare const consoleTextFormat: winston.Logform.Format;
3
+ export declare const fileTextFormat: winston.Logform.Format;
4
+ //# sourceMappingURL=winston-formats.d.ts.map
@@ -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
+ }