@miketako3/cloki 0.1.20 → 0.1.22

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 CHANGED
@@ -75,23 +75,119 @@ You can pass a string directly as a message. It will be converted to `{"message"
75
75
  await logger.info("Hello World!");
76
76
  ```
77
77
 
78
- #### 3. Cloudflare Workers `ctx.waitUntil`
78
+ #### 3. Cloudflare Workers `ctx.waitUntil` and `cf` properties
79
79
 
80
- To prevent the log sending from being cancelled when the worker returns a response, you can pass the `ExecutionContext`.
80
+ To prevent the log sending from being cancelled when the worker returns a response, you can pass the `ExecutionContext` to `getLokiLogger` or to each log method. You can also automatically add labels from `request.cf`.
81
81
 
82
82
  ```typescript
83
83
  export default {
84
84
  async fetch(request, env, ctx) {
85
- const logger = getLokiLogger({ ... });
85
+ const logger = getLokiLogger({
86
+ cf: request.cf, // Automatically add cf_colo, cf_country, etc.
87
+ ctx: ctx // Use ctx.waitUntil internally for all logs
88
+ });
86
89
 
87
90
  // This will use ctx.waitUntil internally and won't block the response
88
- logger.info("Request received", { path: new URL(request.url).pathname }, ctx);
91
+ logger.info("Request received", { path: new URL(request.url).pathname });
89
92
 
90
93
  return new Response("OK");
91
94
  }
92
95
  }
93
96
  ```
94
97
 
98
+ #### 4. Zero Configuration (Environment Variables)
99
+
100
+ If you set the following environment variables, you can initialize the logger without any arguments:
101
+
102
+ - `LOKI_HOST` (e.g., `logs-prod-us-central1.grafana.net`)
103
+ - `LOKI_USER`
104
+ - `LOKI_TOKEN`
105
+
106
+ Standard usage for Cloudflare Workers:
107
+
108
+ ```typescript
109
+ export default {
110
+ async fetch(request, env, ctx) {
111
+ const logger = getLokiLogger({ cf: request.cf, ctx });
112
+ // ...
113
+ }
114
+ }
115
+ ```
116
+
117
+ #### 5. Retries and Error Handling
118
+
119
+ You can configure retries and a callback for when sending fails.
120
+
121
+ ```typescript
122
+ const logger = getLokiLogger({
123
+ retries: 3,
124
+ onSendError: (err, msg) => {
125
+ console.error("Failed to send to Loki after retries", err);
126
+ }
127
+ });
128
+ ```
129
+
130
+ #### 6. Custom Formatter and Silent Mode
131
+
132
+ ```typescript
133
+ const logger = getLokiLogger({
134
+ silent: process.env.NODE_ENV === 'development',
135
+ format: (level, msg, labels) => {
136
+ // Return custom LokiMessage structure
137
+ return {
138
+ streams: [{
139
+ stream: { ...labels, level, custom: 'label' },
140
+ values: [[Date.now().toString() + "000000", JSON.stringify(msg)]]
141
+ }]
142
+ };
143
+ }
144
+ });
145
+ ```
146
+
147
+ #### 7. Request Auto Extraction and Trace IDs
148
+
149
+ You can automatically extract labels like `http_method`, `http_url`, `trace_id` (from `CF-Ray`), and `request_id` (from `X-Request-ID`) by passing the `Request` object.
150
+
151
+ ```typescript
152
+ const logger = getLokiLogger({
153
+ request: request // Default request for all logs
154
+ });
155
+
156
+ // Or pass it in a specific log
157
+ await logger.info({ message: "API called", request: request });
158
+ ```
159
+
160
+ #### 8. Function Wrapper (AOP Style)
161
+
162
+ You can measure execution time and log it automatically using the `wrap` method.
163
+
164
+ ```typescript
165
+ const wrappedFetch = logger.wrap("external-api", async (url) => {
166
+ return await fetch(url);
167
+ });
168
+
169
+ const response = await wrappedFetch("https://example.com");
170
+ // This will automatically log: Function external-api executed with duration_ms
171
+ ```
172
+
173
+ #### 9. Development Environment (Pretty Print)
174
+
175
+ When `NODE_ENV` or `WORKER_ENV` is set to `development` (or `dev`), or `silent: true` is set, `cloki` will output colorized and formatted logs to the console for better readability.
176
+
177
+ #### 10. TypeScript Type Safety for Labels
178
+
179
+ You can define the allowed label keys using Generics.
180
+
181
+ ```typescript
182
+ type MyLabels = 'env' | 'service' | 'version';
183
+ const logger = getLokiLogger<MyLabels>({
184
+ defaultLabels: { env: 'prod' } // Type checked
185
+ });
186
+
187
+ await logger.info("Hello", { service: 'api' }); // Type checked
188
+ // await logger.info("Hello", { unknown: 'label' }); // TypeScript Error
189
+ ```
190
+
95
191
  ## Contributing
96
192
 
97
193
  Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
package/dist/logger.d.ts CHANGED
@@ -1,18 +1,46 @@
1
1
  /**
2
2
  * Loki config
3
3
  */
4
- export type LokiConfig = {
5
- lokiHost: string;
6
- lokiToken: string;
7
- lokiUser: string;
4
+ export type LokiConfig<T extends string = string> = {
5
+ lokiHost?: string;
6
+ lokiToken?: string;
7
+ lokiUser?: string;
8
8
  /**
9
9
  * Default labels added to all logs
10
10
  */
11
- defaultLabels?: LokiLabels;
11
+ defaultLabels?: LokiLabels<T>;
12
12
  /**
13
13
  * Minimum log level to send to Loki
14
14
  */
15
15
  minLevel?: LogLevel;
16
+ /**
17
+ * Number of retries for fetch (default: 0)
18
+ */
19
+ retries?: number;
20
+ /**
21
+ * Callback when fetch fails
22
+ */
23
+ onSendError?: (error: unknown, message: LokiMessage<T>) => void;
24
+ /**
25
+ * Custom formatter for Loki message
26
+ */
27
+ format?: (logLevel: LogLevel, message: object, labels: LokiLabels<T>) => LokiMessage<T>;
28
+ /**
29
+ * If true, don't send to Loki (just console.log)
30
+ */
31
+ silent?: boolean;
32
+ /**
33
+ * Automatically add labels from request.cf
34
+ */
35
+ cf?: CfProperties;
36
+ /**
37
+ * Default ExecutionContext for ctx.waitUntil
38
+ */
39
+ ctx?: ExecutionContext;
40
+ /**
41
+ * Default Request object for automatic label extraction
42
+ */
43
+ request?: Request;
16
44
  };
17
45
  /**
18
46
  * Log levels
@@ -21,20 +49,32 @@ export type LogLevel = "debug" | "info" | "warn" | "error";
21
49
  /**
22
50
  * Loki labels
23
51
  */
24
- export type LokiLabels = {
52
+ export type LokiLabels<T extends string = string> = {
53
+ [key in T]?: string;
54
+ } & {
25
55
  [key: string]: string;
26
56
  };
27
57
  /**
28
58
  * Loki message
29
59
  */
30
- export type LokiMessage = {
60
+ export type LokiMessage<T extends string = string> = {
31
61
  streams: [
32
62
  {
33
- stream: LokiLabels;
63
+ stream: LokiLabels<T>;
34
64
  values: [string[]];
35
65
  }
36
66
  ];
37
67
  };
68
+ /**
69
+ * Cloudflare Workers IncomingRequestCfProperties
70
+ */
71
+ export type CfProperties = {
72
+ colo?: string;
73
+ country?: string;
74
+ city?: string;
75
+ asn?: number;
76
+ [key: string]: unknown;
77
+ };
38
78
  /**
39
79
  * Cloudflare Workers ExecutionContext
40
80
  */
@@ -44,16 +84,20 @@ export type ExecutionContext = {
44
84
  /**
45
85
  * Log message type
46
86
  */
47
- export type LogMessage = string | object;
87
+ export type LogMessage = string | object | {
88
+ request?: Request;
89
+ [key: string]: unknown;
90
+ };
48
91
  /**
49
92
  * Create a Loki logger
50
93
  * logger has some async logging methods like info, error, warn, etc.
51
94
  *
52
95
  * @param config
53
96
  */
54
- export declare const getLokiLogger: (config: LokiConfig) => {
55
- info: (message: LogMessage, labels?: LokiLabels, ctx?: ExecutionContext) => Promise<void>;
56
- warn: (message: LogMessage, labels?: LokiLabels, ctx?: ExecutionContext) => Promise<void>;
57
- error: (message: LogMessage, labels?: LokiLabels, ctx?: ExecutionContext) => Promise<void>;
58
- debug: (message: LogMessage, labels?: LokiLabels, ctx?: ExecutionContext) => Promise<void>;
97
+ export declare const getLokiLogger: <T extends string = string>(config?: LokiConfig<T>) => {
98
+ info: (message: LogMessage, labels?: LokiLabels<T> | undefined, ctx?: ExecutionContext) => Promise<void>;
99
+ warn: (message: LogMessage, labels?: LokiLabels<T> | undefined, ctx?: ExecutionContext) => Promise<void>;
100
+ error: (message: LogMessage, labels?: LokiLabels<T> | undefined, ctx?: ExecutionContext) => Promise<void>;
101
+ debug: (message: LogMessage, labels?: LokiLabels<T> | undefined, ctx?: ExecutionContext) => Promise<void>;
102
+ wrap: <R, Args extends unknown[]>(name: string, fn: (...args: Args) => R | Promise<R>) => (...args: Args) => Promise<R>;
59
103
  };
package/dist/logger.js CHANGED
@@ -22,15 +22,62 @@ const LOG_LEVEL_PRIORITY = {
22
22
  *
23
23
  * @param config
24
24
  */
25
- const getLokiLogger = (config) => {
25
+ const getLokiLogger = (config = {}) => {
26
+ var _a;
27
+ const mergedConfig = Object.assign(Object.assign({}, config), { lokiHost: config.lokiHost ||
28
+ getEnv("LOKI_HOST") ||
29
+ ((_a = getEnv("LOKI_URL")) === null || _a === void 0 ? void 0 : _a.replace(/^https?:\/\//, "")), lokiToken: config.lokiToken || getEnv("LOKI_TOKEN"), lokiUser: config.lokiUser || getEnv("LOKI_USER") });
26
30
  return {
27
- info: lokiInfo(config),
28
- warn: lokiWarn(config),
29
- error: lokiError(config),
30
- debug: lokiDebug(config),
31
+ info: lokiInfo(mergedConfig),
32
+ warn: lokiWarn(mergedConfig),
33
+ error: lokiError(mergedConfig),
34
+ debug: lokiDebug(mergedConfig),
35
+ wrap: (name, fn) => {
36
+ return (...args) => __awaiter(void 0, void 0, void 0, function* () {
37
+ const start = Date.now();
38
+ try {
39
+ const result = yield fn(...args);
40
+ const duration = Date.now() - start;
41
+ yield log(mergedConfig, "info", {
42
+ message: `Function ${name} executed`,
43
+ duration_ms: duration,
44
+ function_name: name,
45
+ }, {});
46
+ return result;
47
+ }
48
+ catch (error) {
49
+ const duration = Date.now() - start;
50
+ yield log(mergedConfig, "error", {
51
+ message: `Function ${name} failed`,
52
+ duration_ms: duration,
53
+ function_name: name,
54
+ error: error instanceof Error ? error.message : String(error),
55
+ }, {});
56
+ throw error;
57
+ }
58
+ });
59
+ },
31
60
  };
32
61
  };
33
62
  exports.getLokiLogger = getLokiLogger;
63
+ /**
64
+ * Get environment variable from various sources
65
+ */
66
+ function getEnv(name) {
67
+ try {
68
+ // Node.js
69
+ if (typeof process !== "undefined" && process.env) {
70
+ return process.env[name];
71
+ }
72
+ // Global
73
+ if (typeof globalThis !== "undefined") {
74
+ const global = globalThis;
75
+ return global[name];
76
+ }
77
+ }
78
+ catch (_e) { }
79
+ return undefined;
80
+ }
34
81
  /**
35
82
  * Log info to Loki curried
36
83
  *
@@ -79,11 +126,30 @@ function log(config, logLevel, message, labels, ctx) {
79
126
  return;
80
127
  }
81
128
  const normalizedMessage = typeof message === "string" ? { message } : message;
82
- console.log(JSON.stringify(normalizedMessage));
83
- const lokiMessage = generateLokiMessage(config, logLevel, normalizedMessage, labels);
84
- const promise = sendToLoki(config, lokiMessage);
85
- if (ctx) {
86
- ctx.waitUntil(promise);
129
+ const isDev = getEnv("NODE_ENV") === "development" || getEnv("WORKER_ENV") === "dev";
130
+ if (config.silent || isDev) {
131
+ const colorMap = {
132
+ debug: "\x1b[34m", // blue
133
+ info: "\x1b[32m", // green
134
+ warn: "\x1b[33m", // yellow
135
+ error: "\x1b[31m", // red
136
+ };
137
+ const reset = "\x1b[0m";
138
+ console.log(`${colorMap[logLevel]}[${logLevel.toUpperCase()}]${reset}`, JSON.stringify(normalizedMessage, null, isDev ? 2 : 0));
139
+ }
140
+ else {
141
+ console.log(JSON.stringify(normalizedMessage));
142
+ }
143
+ if (config.silent) {
144
+ return;
145
+ }
146
+ const lokiMessage = config.format
147
+ ? config.format(logLevel, normalizedMessage, labels)
148
+ : generateLokiMessage(config, logLevel, normalizedMessage, labels);
149
+ const promise = sendWithRetry(config, lokiMessage);
150
+ const effectiveCtx = ctx || config.ctx;
151
+ if (effectiveCtx) {
152
+ effectiveCtx.waitUntil(promise);
87
153
  }
88
154
  else {
89
155
  yield promise;
@@ -99,15 +165,69 @@ function log(config, logLevel, message, labels, ctx) {
99
165
  * @param labels
100
166
  */
101
167
  function generateLokiMessage(config, logLevel, message, labels) {
168
+ const cfLabels = {};
169
+ if (config.cf) {
170
+ if (config.cf.colo)
171
+ cfLabels.cf_colo = config.cf.colo;
172
+ if (config.cf.country)
173
+ cfLabels.cf_country = config.cf.country;
174
+ if (config.cf.city)
175
+ cfLabels.cf_city = config.cf.city;
176
+ if (config.cf.asn)
177
+ cfLabels.cf_asn = config.cf.asn.toString();
178
+ }
179
+ const requestLabels = {};
180
+ const req = message.request || config.request;
181
+ if (req) {
182
+ requestLabels.http_method = req.method;
183
+ requestLabels.http_url = req.url;
184
+ const userAgent = req.headers.get("user-agent");
185
+ if (userAgent)
186
+ requestLabels.http_user_agent = userAgent;
187
+ const rayId = req.headers.get("cf-ray");
188
+ if (rayId)
189
+ requestLabels.trace_id = rayId;
190
+ const requestId = req.headers.get("x-request-id");
191
+ if (requestId)
192
+ requestLabels.request_id = requestId;
193
+ }
102
194
  return {
103
195
  streams: [
104
196
  {
105
- stream: Object.assign(Object.assign({ level: logLevel }, config.defaultLabels), labels),
197
+ stream: Object.assign(Object.assign(Object.assign(Object.assign({ level: logLevel }, config.defaultLabels), cfLabels), requestLabels), labels),
106
198
  values: [[`${Date.now().toString()}000000`, JSON.stringify(message)]],
107
199
  },
108
200
  ],
109
201
  };
110
202
  }
203
+ /**
204
+ * Send with retry
205
+ */
206
+ function sendWithRetry(config, lokiMessage) {
207
+ return __awaiter(this, void 0, void 0, function* () {
208
+ const retries = config.retries || 0;
209
+ let lastError;
210
+ for (let i = 0; i <= retries; i++) {
211
+ try {
212
+ yield sendToLoki(config, lokiMessage);
213
+ return; // Success
214
+ }
215
+ catch (e) {
216
+ lastError = e;
217
+ if (i < retries) {
218
+ // Simple backoff: 100ms, 200ms, 400ms...
219
+ yield new Promise((resolve) => setTimeout(resolve, 100 * 2 ** i));
220
+ }
221
+ }
222
+ }
223
+ if (config.onSendError) {
224
+ config.onSendError(lastError, lokiMessage);
225
+ }
226
+ else {
227
+ console.error("Loki logging failed after retries:", lastError);
228
+ }
229
+ });
230
+ }
111
231
  /**
112
232
  * Send a message to Loki
113
233
  *
@@ -116,22 +236,20 @@ function generateLokiMessage(config, logLevel, message, labels) {
116
236
  */
117
237
  function sendToLoki(config, lokiMessage) {
118
238
  return __awaiter(this, void 0, void 0, function* () {
119
- yield fetch(`https://${config.lokiHost}/loki/api/v1/push`, {
239
+ if (!config.lokiHost || !config.lokiUser || !config.lokiToken) {
240
+ throw new Error("Loki configuration missing (host, user, or token)");
241
+ }
242
+ const response = yield fetch(`https://${config.lokiHost}/loki/api/v1/push`, {
120
243
  method: "POST",
121
244
  headers: {
122
245
  "Content-Type": "application/json",
123
246
  Authorization: `Basic ${btoa(`${config.lokiUser}:${config.lokiToken}`)}`,
124
247
  },
125
248
  body: JSON.stringify(lokiMessage),
126
- })
127
- .then((r) => {
128
- if (!r.ok) {
129
- throw new Error(r.statusText);
130
- }
131
- })
132
- .catch((e) => {
133
- console.error("Error:", e);
134
249
  });
250
+ if (!response.ok) {
251
+ throw new Error(`Loki push failed: ${response.status} ${response.statusText}`);
252
+ }
135
253
  });
136
254
  }
137
255
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,6 @@ const logger_1 = require("./logger"); // Adjust the import path as necessary
14
14
  global.fetch = vitest_1.vi.fn(() => Promise.resolve({
15
15
  ok: true,
16
16
  }));
17
- Date.now = vitest_1.vi.fn(() => 1482363367071);
18
17
  (0, vitest_1.describe)("Loki Logger", () => {
19
18
  const mockConfig = {
20
19
  lokiHost: "testhost",
@@ -23,6 +22,7 @@ Date.now = vitest_1.vi.fn(() => 1482363367071);
23
22
  };
24
23
  (0, vitest_1.beforeEach)(() => {
25
24
  vitest_1.vi.clearAllMocks();
25
+ vitest_1.vi.restoreAllMocks();
26
26
  });
27
27
  (0, vitest_1.it)("should create a logger with the correct methods", () => {
28
28
  const logger = (0, logger_1.getLokiLogger)(mockConfig);
@@ -32,15 +32,13 @@ Date.now = vitest_1.vi.fn(() => 1482363367071);
32
32
  (0, vitest_1.expect)(logger).toHaveProperty("debug");
33
33
  });
34
34
  (0, vitest_1.describe)("Logging Methods", () => {
35
- vitest_1.it.each([
36
- "info",
37
- "warn",
38
- "error",
39
- "debug",
40
- ])("should call log for %s method", (method) => __awaiter(void 0, void 0, void 0, function* () {
35
+ const methods = ["info", "warn", "error", "debug"];
36
+ vitest_1.it.each(methods)("should call log for %s method", (method) => __awaiter(void 0, void 0, void 0, function* () {
37
+ const consoleErrorSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
41
38
  const logger = (0, logger_1.getLokiLogger)(mockConfig);
42
39
  const mockMessage = { test: "message" };
43
40
  const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
41
+ const dateNowSpy = vitest_1.vi.spyOn(Date, "now").mockReturnValue(1482363367071);
44
42
  yield logger[method](mockMessage);
45
43
  (0, vitest_1.expect)(consoleSpy).toHaveBeenCalledWith(JSON.stringify(mockMessage));
46
44
  (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(1);
@@ -54,17 +52,16 @@ Date.now = vitest_1.vi.fn(() => 1482363367071);
54
52
  });
55
53
  // Reset the spy
56
54
  consoleSpy.mockRestore();
55
+ dateNowSpy.mockRestore();
56
+ consoleErrorSpy.mockRestore();
57
57
  }));
58
- vitest_1.it.each([
59
- "info",
60
- "warn",
61
- "error",
62
- "debug",
63
- ])("should call log for %s method with some labels", (method) => __awaiter(void 0, void 0, void 0, function* () {
58
+ vitest_1.it.each(methods)("should call log for %s method with some labels", (method) => __awaiter(void 0, void 0, void 0, function* () {
59
+ const consoleErrorSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
64
60
  const logger = (0, logger_1.getLokiLogger)(mockConfig);
65
61
  const mockMessage = { test: "message" };
66
62
  const mockLabels = { hoge: "huga" };
67
63
  const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
64
+ const dateNowSpy = vitest_1.vi.spyOn(Date, "now").mockReturnValue(1482363367071);
68
65
  yield logger[method](mockMessage, mockLabels);
69
66
  (0, vitest_1.expect)(consoleSpy).toHaveBeenCalledWith(JSON.stringify(mockMessage));
70
67
  (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(1);
@@ -76,62 +73,235 @@ Date.now = vitest_1.vi.fn(() => 1482363367071);
76
73
  },
77
74
  body: `{"streams":[{"stream":{"level":"${method}","hoge":"huga"},"values":[["1482363367071000000","{\\"test\\":\\"message\\"}"]]}]}`,
78
75
  });
79
- // Reset the spy
80
76
  consoleSpy.mockRestore();
77
+ dateNowSpy.mockRestore();
78
+ consoleErrorSpy.mockRestore();
81
79
  }));
82
80
  });
83
- (0, vitest_1.describe)("New Features", () => {
84
- (0, vitest_1.it)("should support string messages", () => __awaiter(void 0, void 0, void 0, function* () {
85
- const logger = (0, logger_1.getLokiLogger)(mockConfig);
86
- const message = "string message";
87
- const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
88
- yield logger.info(message);
89
- (0, vitest_1.expect)(consoleSpy).toHaveBeenCalledWith(JSON.stringify({ message }));
90
- (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.any(String), vitest_1.expect.objectContaining({
91
- body: vitest_1.expect.stringContaining(JSON.stringify({ message }).replace(/"/g, '\\"')),
92
- }));
81
+ });
82
+ (0, vitest_1.describe)("Advanced Features", () => {
83
+ const mockConfig = {
84
+ lokiHost: "testhost",
85
+ lokiToken: "token123",
86
+ lokiUser: "user",
87
+ };
88
+ (0, vitest_1.beforeEach)(() => {
89
+ vitest_1.vi.clearAllMocks();
90
+ });
91
+ (0, vitest_1.it)("should support zero config from env", () => __awaiter(void 0, void 0, void 0, function* () {
92
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
93
+ // Mock environment variables
94
+ process.env.LOKI_HOST = "env-host";
95
+ process.env.LOKI_TOKEN = "env-token";
96
+ process.env.LOKI_USER = "env-user";
97
+ const logger = (0, logger_1.getLokiLogger)();
98
+ yield logger.info({ msg: "test" });
99
+ (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.stringContaining("env-host"), vitest_1.expect.objectContaining({
100
+ headers: vitest_1.expect.objectContaining({
101
+ Authorization: `Basic ${btoa("env-user:env-token")}`,
102
+ }),
103
+ }));
104
+ // Cleanup
105
+ delete process.env.LOKI_HOST;
106
+ delete process.env.LOKI_TOKEN;
107
+ delete process.env.LOKI_USER;
108
+ consoleSpy.mockRestore();
109
+ }));
110
+ (0, vitest_1.it)("should not send when silent: true", () => __awaiter(void 0, void 0, void 0, function* () {
111
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { silent: true }));
112
+ yield logger.info({ msg: "test" });
113
+ (0, vitest_1.expect)(fetch).not.toHaveBeenCalled();
114
+ }));
115
+ (0, vitest_1.it)("should retry on failure", () => __awaiter(void 0, void 0, void 0, function* () {
116
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
117
+ let callCount = 0;
118
+ global.fetch = vitest_1.vi.fn(() => __awaiter(void 0, void 0, void 0, function* () {
119
+ callCount++;
120
+ if (callCount < 3) {
121
+ return { ok: false, status: 500, statusText: "Error" };
122
+ }
123
+ return { ok: true };
124
+ }));
125
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { retries: 3 }));
126
+ yield logger.info({ msg: "test" });
127
+ (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(3);
128
+ consoleSpy.mockRestore();
129
+ }));
130
+ (0, vitest_1.it)("should call onSendError after retries fail", () => __awaiter(void 0, void 0, void 0, function* () {
131
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
132
+ global.fetch = vitest_1.vi.fn(() => __awaiter(void 0, void 0, void 0, function* () {
133
+ return ({
134
+ ok: false,
135
+ status: 500,
136
+ statusText: "Fatal",
137
+ });
138
+ }));
139
+ const onSendError = vitest_1.vi.fn();
140
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { retries: 1, onSendError }));
141
+ yield logger.info({ msg: "test" });
142
+ (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(2);
143
+ (0, vitest_1.expect)(onSendError).toHaveBeenCalled();
144
+ consoleSpy.mockRestore();
145
+ }));
146
+ (0, vitest_1.it)("should support custom format", () => __awaiter(void 0, void 0, void 0, function* () {
147
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
148
+ const format = vitest_1.vi.fn((_level, _msg, _labels) => ({
149
+ streams: [
150
+ {
151
+ stream: { custom: "label" },
152
+ values: [["123456", "custom-body"]],
153
+ },
154
+ ],
155
+ }));
156
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { format: format }));
157
+ yield logger.info({ msg: "test" });
158
+ const fetchMock = fetch;
159
+ const _body = JSON.parse(fetchMock.mock.calls[0][1].body);
160
+ (0, vitest_1.expect)(format).toHaveBeenCalled();
161
+ (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.any(String), vitest_1.expect.objectContaining({
162
+ body: vitest_1.expect.stringContaining("custom-body"),
163
+ }));
164
+ consoleSpy.mockRestore();
165
+ }));
166
+ (0, vitest_1.it)("should add labels from cf properties", () => __awaiter(void 0, void 0, void 0, function* () {
167
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
168
+ const cf = {
169
+ colo: "KIX",
170
+ country: "JP",
171
+ city: "Osaka",
172
+ asn: 12345,
173
+ };
174
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { cf }));
175
+ yield logger.info({ msg: "test" });
176
+ const fetchMock = fetch;
177
+ const body = JSON.parse(fetchMock.mock.calls[0][1].body);
178
+ const stream = body.streams[0].stream;
179
+ (0, vitest_1.expect)(stream.cf_colo).toBe("KIX");
180
+ (0, vitest_1.expect)(stream.cf_country).toBe("JP");
181
+ (0, vitest_1.expect)(stream.cf_city).toBe("Osaka");
182
+ (0, vitest_1.expect)(stream.cf_asn).toBe("12345");
183
+ consoleSpy.mockRestore();
184
+ }));
185
+ (0, vitest_1.describe)("Request Auto Extraction", () => {
186
+ const mockRequest = {
187
+ method: "GET",
188
+ url: "https://example.com/api",
189
+ headers: new Map([
190
+ ["user-agent", "test-agent"],
191
+ ["cf-ray", "ray-123"],
192
+ ["x-request-id", "req-456"],
193
+ ]),
194
+ };
195
+ (0, vitest_1.it)("should extract labels from request in config", () => __awaiter(void 0, void 0, void 0, function* () {
196
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
197
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { request: mockRequest }));
198
+ yield logger.info({ msg: "test" });
199
+ const fetchMock = fetch;
200
+ const body = JSON.parse(fetchMock.mock.calls[0][1].body);
201
+ const stream = body.streams[0].stream;
202
+ (0, vitest_1.expect)(stream.http_method).toBe("GET");
203
+ (0, vitest_1.expect)(stream.http_url).toBe("https://example.com/api");
204
+ (0, vitest_1.expect)(stream.http_user_agent).toBe("test-agent");
205
+ (0, vitest_1.expect)(stream.trace_id).toBe("ray-123");
206
+ (0, vitest_1.expect)(stream.request_id).toBe("req-456");
93
207
  consoleSpy.mockRestore();
94
208
  }));
95
- (0, vitest_1.it)("should apply default labels", () => __awaiter(void 0, void 0, void 0, function* () {
96
- const configWithLabels = Object.assign(Object.assign({}, mockConfig), { defaultLabels: { env: "prod", app: "test" } });
97
- const logger = (0, logger_1.getLokiLogger)(configWithLabels);
98
- const mockMessage = { test: "message" };
99
- const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
100
- yield logger.info(mockMessage);
101
- (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.any(String), vitest_1.expect.objectContaining({
102
- body: vitest_1.expect.stringContaining('"env":"prod"'),
103
- }));
104
- (0, vitest_1.expect)(fetch).toHaveBeenCalledWith(vitest_1.expect.any(String), vitest_1.expect.objectContaining({
105
- body: vitest_1.expect.stringContaining('"app":"test"'),
106
- }));
209
+ (0, vitest_1.it)("should extract labels from request in message", () => __awaiter(void 0, void 0, void 0, function* () {
210
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
211
+ const logger = (0, logger_1.getLokiLogger)(mockConfig);
212
+ yield logger.info({ msg: "test", request: mockRequest });
213
+ const fetchMock = fetch;
214
+ const body = JSON.parse(fetchMock.mock.calls[0][1].body);
215
+ const stream = body.streams[0].stream;
216
+ (0, vitest_1.expect)(stream.http_method).toBe("GET");
217
+ (0, vitest_1.expect)(stream.trace_id).toBe("ray-123");
107
218
  consoleSpy.mockRestore();
108
219
  }));
109
- (0, vitest_1.it)("should respect minLevel", () => __awaiter(void 0, void 0, void 0, function* () {
110
- const configWithMinLevel = Object.assign(Object.assign({}, mockConfig), { minLevel: "warn" });
111
- const logger = (0, logger_1.getLokiLogger)(configWithMinLevel);
112
- const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
113
- yield logger.debug({ msg: "debug" });
114
- yield logger.info({ msg: "info" });
115
- (0, vitest_1.expect)(fetch).not.toHaveBeenCalled();
116
- yield logger.warn({ msg: "warn" });
220
+ });
221
+ (0, vitest_1.describe)("Wrapper (AOP)", () => {
222
+ (0, vitest_1.it)("should measure execution time and log it", () => __awaiter(void 0, void 0, void 0, function* () {
223
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
224
+ const logger = (0, logger_1.getLokiLogger)(mockConfig);
225
+ // Simulate passage of time by returning different values for Date.now
226
+ const dateNowSpy = vitest_1.vi.spyOn(Date, "now");
227
+ dateNowSpy
228
+ .mockReturnValueOnce(1000) // start
229
+ .mockReturnValueOnce(1010) // end
230
+ .mockReturnValue(1010); // for generateLokiMessage
231
+ const fn = (a, b) => __awaiter(void 0, void 0, void 0, function* () {
232
+ return a + b;
233
+ });
234
+ const wrapped = logger.wrap("testFn", fn);
235
+ const result = yield wrapped(1, 2);
236
+ (0, vitest_1.expect)(result).toBe(3);
117
237
  (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(1);
118
- yield logger.error({ msg: "error" });
119
- (0, vitest_1.expect)(fetch).toHaveBeenCalledTimes(2);
238
+ const fetchMock = fetch;
239
+ const body = JSON.parse(fetchMock.mock.calls[0][1].body);
240
+ const message = JSON.parse(body.streams[0].values[0][1]);
241
+ (0, vitest_1.expect)(message.function_name).toBe("testFn");
242
+ (0, vitest_1.expect)(message.duration_ms).toBe(10);
243
+ dateNowSpy.mockRestore();
120
244
  consoleSpy.mockRestore();
121
245
  }));
122
- (0, vitest_1.it)("should use ctx.waitUntil when provided", () => __awaiter(void 0, void 0, void 0, function* () {
246
+ (0, vitest_1.it)("should log error on failure", () => __awaiter(void 0, void 0, void 0, function* () {
247
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
123
248
  const logger = (0, logger_1.getLokiLogger)(mockConfig);
124
- const mockCtx = {
125
- waitUntil: vitest_1.vi.fn(),
126
- };
249
+ const fn = () => __awaiter(void 0, void 0, void 0, function* () {
250
+ throw new Error("fail");
251
+ });
252
+ const wrapped = logger.wrap("failFn", fn);
253
+ yield (0, vitest_1.expect)(wrapped()).rejects.toThrow("fail");
254
+ const fetchMock = fetch;
255
+ const body = JSON.parse(fetchMock.mock.calls[0][1].body);
256
+ const stream = body.streams[0].stream;
257
+ (0, vitest_1.expect)(stream.level).toBe("error");
258
+ const message = JSON.parse(body.streams[0].values[0][1]);
259
+ (0, vitest_1.expect)(message.function_name).toBe("failFn");
260
+ (0, vitest_1.expect)(message.error).toBe("fail");
261
+ consoleSpy.mockRestore();
262
+ }));
263
+ });
264
+ (0, vitest_1.describe)("Dev environment", () => {
265
+ (0, vitest_1.it)("should use pretty print in dev", () => __awaiter(void 0, void 0, void 0, function* () {
266
+ process.env.NODE_ENV = "development";
127
267
  const consoleSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
128
- yield logger.info({ msg: "test" }, {}, mockCtx);
129
- (0, vitest_1.expect)(mockCtx.waitUntil).toHaveBeenCalled();
130
- // In case of waitUntil, the logger shouldn't await the fetch promise internally
131
- // but we can't easily check that without complex mocking.
132
- // At least we verify waitUntil was called.
268
+ const logger = (0, logger_1.getLokiLogger)(mockConfig);
269
+ yield logger.info({ msg: "test" });
270
+ (0, vitest_1.expect)(consoleSpy).toHaveBeenCalledWith(vitest_1.expect.stringContaining("[INFO]"), vitest_1.expect.stringContaining('{\n "msg": "test"\n}'));
271
+ delete process.env.NODE_ENV;
133
272
  consoleSpy.mockRestore();
134
273
  }));
135
274
  });
136
275
  });
276
+ (0, vitest_1.describe)("Cloudflare Workers context", () => {
277
+ const mockConfig = {
278
+ lokiHost: "testhost",
279
+ lokiToken: "token123",
280
+ lokiUser: "user",
281
+ };
282
+ (0, vitest_1.it)("should use ctx from getLokiLogger", () => __awaiter(void 0, void 0, void 0, function* () {
283
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
284
+ const ctx = {
285
+ waitUntil: vitest_1.vi.fn(),
286
+ };
287
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { ctx }));
288
+ yield logger.info("test");
289
+ (0, vitest_1.expect)(ctx.waitUntil).toHaveBeenCalled();
290
+ consoleSpy.mockRestore();
291
+ }));
292
+ (0, vitest_1.it)("should use ctx from method call even if getLokiLogger has one", () => __awaiter(void 0, void 0, void 0, function* () {
293
+ const consoleSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
294
+ const ctx1 = {
295
+ waitUntil: vitest_1.vi.fn(),
296
+ };
297
+ const ctx2 = {
298
+ waitUntil: vitest_1.vi.fn(),
299
+ };
300
+ const logger = (0, logger_1.getLokiLogger)(Object.assign(Object.assign({}, mockConfig), { ctx: ctx1 }));
301
+ yield logger.info("test", {}, ctx2);
302
+ (0, vitest_1.expect)(ctx2.waitUntil).toHaveBeenCalled();
303
+ (0, vitest_1.expect)(ctx1.waitUntil).not.toHaveBeenCalled();
304
+ consoleSpy.mockRestore();
305
+ }));
306
+ });
137
307
  //# sourceMappingURL=logger.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../src/logger.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../src/logger.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miketako3/cloki",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "description": "cloki is zero dependency and simple logger library for Loki and Cloudflare Workers.",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -13,7 +13,8 @@
13
13
  "build": "tsc",
14
14
  "format": "bunx @biomejs/biome check . --write",
15
15
  "lint": "bunx @biomejs/biome check .",
16
- "test": "vitest run"
16
+ "test": "vitest run",
17
+ "typecheck": "tsc --noEmit"
17
18
  },
18
19
  "repository": {
19
20
  "type": "git",