Skip to content

Commit a56c71b

Browse files
authored
Merge pull request #18 from deno-library/ISSUE_15_loglevel
[#15] add debug and log as loglevel
2 parents e88837a + 863855b commit a56c71b

File tree

7 files changed

+134
-10
lines changed

7 files changed

+134
-10
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ import { Logger } from "jsr:@deno-library/logger";
1818

1919
const logger = new Logger();
2020

21+
logger.debug("i am from consoleLogger", "debug");
2122
logger.info("i am from consoleLogger", { name: "zfx" });
23+
logger.log("i am from consoleLogger", "hello");
2224
logger.warn("i am from consoleLogger", 1, "any");
2325
logger.error("i am from consoleLogger", new Error("test"));
2426
```
@@ -33,14 +35,18 @@ import { Logger } from "jsr:@deno-library/logger";
3335
const logger = new Logger();
3436

3537
// console only
38+
logger.debug("i am from consoleLogger", "debug");
3639
logger.info("i am from consoleLogger", { name: "zfx" });
40+
logger.log("i am from consoleLogger", "hello");
3741
logger.warn("i am from consoleLogger", 1, "any");
3842
logger.error("i am from consoleLogger", new Error("test"));
3943

4044
await logger.initFileLogger("../log");
4145

4246
// file and console
47+
logger.debug("i am from consoleLogger", "debug");
4348
logger.info("i am from fileLogger", { name: "zfx" });
49+
logger.log("i am from consoleLogger", "hello");
4450
logger.warn("i am from fileLogger", 1, "any");
4551
logger.error("i am from fileLogger", new Error("test"));
4652
```

deno.lock

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deps.ts

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,34 @@
1-
export { green, red, stripAnsiCode, yellow } from "jsr:@std/fmt@1.0.3/colors";
2-
// UNSTABLE
3-
export { writeAll } from "jsr:@std/io@0.225.0/write-all";
4-
export { exists } from "jsr:@std/fs@1.0.5";
1+
export {
2+
cyan,
3+
gray,
4+
green,
5+
red,
6+
stripAnsiCode,
7+
yellow,
8+
} from "jsr:@std/fmt@1.0.3/colors";
9+
10+
/**
11+
* use a local copy of UNSTABLE { type Writer, writeAll } from "jsr:@std/io@0.225.0/write-all";
12+
*/
13+
export interface Writer {
14+
/** Writes `p.byteLength` bytes from `p` to the underlying data stream. It
15+
* resolves to the number of bytes written from `p` (`0` <= `n` <=
16+
* `p.byteLength`) or reject with the error encountered that caused the
17+
* write to stop early. `write()` must reject with a non-null error if
18+
* would resolve to `n` < `p.byteLength`. `write()` must not modify the
19+
* slice data, even temporarily.
20+
*
21+
* Implementations should not retain a reference to `p`.
22+
*/
23+
write(p: Uint8Array): Promise<number>;
24+
}
25+
26+
export async function writeAll(writer: Writer, data: Uint8Array) {
27+
let nwritten = 0;
28+
while (nwritten < data.length) {
29+
nwritten += await writer.write(data.subarray(nwritten));
30+
}
31+
}
32+
export { exists } from "jsr:@std/fs@^1.0.6";
33+
34+
export { stat } from "node:fs/promises";

logger.ts

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import stdout from "./stdout.ts";
22
import Writer from "./writer.ts";
33
import eol from "./eol.ts";
4-
import { exists } from "./deps.ts";
54
import Dater from "./date.ts";
6-
import { green, red, stripAnsiCode, yellow } from "./deps.ts";
5+
import { cyan, exists, green, red, stripAnsiCode, yellow } from "./deps.ts";
76
import type { fileLoggerOptions, LoggerWriteOptions } from "./interface.ts";
87
import Types from "./types.ts";
8+
99
const { inspect } = Deno;
1010

1111
const noop = async () => {};
1212

13+
export type LoggerType = "debug" | "info" | "log" | "warn" | "error";
14+
1315
/**
1416
* Logger class
1517
*/
@@ -20,7 +22,9 @@ export default class Logger {
2022
private rotate = false;
2123
private dir?: string;
2224

25+
#debug = this.debug;
2326
#info = this.info;
27+
#log = this.log;
2428
#warn = this.warn;
2529
#error = this.error;
2630
#write = this.write;
@@ -38,6 +42,21 @@ export default class Logger {
3842
return this.encoder.encode(stripAnsiCode(msg) + eol);
3943
}
4044

45+
/**
46+
* Log message with debug level
47+
* @param args data to log
48+
*/
49+
async debug(...args: unknown[]): Promise<void> {
50+
args = [this.getDebug(), ...args];
51+
this.stdout(...args);
52+
if (this.dir) {
53+
await this.write({
54+
dir: this.dir,
55+
type: Types.DEBUG,
56+
args,
57+
});
58+
}
59+
}
4160
/**
4261
* Log message with info level
4362
* @param args data to log
@@ -54,6 +73,22 @@ export default class Logger {
5473
}
5574
}
5675

76+
/**
77+
* Log message with info level
78+
* @param args data to log
79+
*/
80+
async log(...args: unknown[]): Promise<void> {
81+
args = [this.getLog(), ...args];
82+
this.stdout(...args);
83+
if (this.dir) {
84+
await this.write({
85+
dir: this.dir,
86+
type: Types.LOG,
87+
args,
88+
});
89+
}
90+
}
91+
5792
/**
5893
* Log message with warning level
5994
* @param args data to log
@@ -126,17 +161,27 @@ export default class Logger {
126161
* disable a specific type of logger
127162
* @param type Level of logger to disable
128163
*/
129-
disable(type?: "info" | "warn" | "error"): void {
164+
disable(type?: LoggerType): void {
130165
if (!type) {
166+
this.debug = noop;
131167
this.info = noop;
168+
this.log = noop;
132169
this.warn = noop;
133170
this.error = noop;
134171
return;
135172
}
173+
if (type === "debug") {
174+
this.debug = noop;
175+
return;
176+
}
136177
if (type === "info") {
137178
this.info = noop;
138179
return;
139180
}
181+
if (type === "log") {
182+
this.log = noop;
183+
return;
184+
}
140185
if (type === "warn") {
141186
this.warn = noop;
142187
return;
@@ -151,16 +196,26 @@ export default class Logger {
151196
* Enable a specific type of logger
152197
* @param type Level of logger to enable
153198
*/
154-
enable(type?: "info" | "warn" | "error"): void {
199+
enable(type?: LoggerType): void {
155200
if (!type) {
201+
this.debug = this.#debug;
156202
this.info = this.#info;
203+
this.log = this.#log;
157204
this.warn = this.#warn;
158205
this.error = this.#error;
159206
}
207+
if (type === "debug") {
208+
this.debug = this.#debug;
209+
return;
210+
}
160211
if (type === "info") {
161212
this.info = this.#info;
162213
return;
163214
}
215+
if (type === "log") {
216+
this.log = this.#log;
217+
return;
218+
}
164219
if (type === "warn") {
165220
this.warn = this.#warn;
166221
return;
@@ -199,8 +254,16 @@ export default class Logger {
199254
this.write = this.#write;
200255
}
201256

257+
private getDebug(): string {
258+
return green(this.getNow() + cyan(` Debug:`));
259+
}
260+
202261
private getInfo(): string {
203-
return green(`${this.getNow()} Info:`);
262+
return green(this.getNow() + green(` Info:`));
263+
}
264+
265+
private getLog(): string {
266+
return green(`${this.getNow()} Log:`);
204267
}
205268

206269
private getWarn(): string {

mod.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ import { Logger } from "jsr:@deno-library/logger";
1717
1818
const logger = new Logger();
1919
20+
logger.debug("i am from consoleLogger", "debug");
2021
logger.info("i am from consoleLogger", { name: "zfx" });
22+
logger.log("i am from consoleLogger", "hello");
2123
logger.warn("i am from consoleLogger", 1, "any");
2224
logger.error("i am from consoleLogger", new Error("test"));
2325
```
@@ -30,14 +32,18 @@ import { Logger } from "jsr:@deno-library/logger";
3032
const logger = new Logger();
3133
3234
// console only
35+
logger.debug("i am from consoleLogger", "debug");
3336
logger.info("i am from consoleLogger", { name: "zfx" });
37+
logger.log("i am from consoleLogger", "hello");
3438
logger.warn("i am from consoleLogger", 1, "any");
3539
logger.error("i am from consoleLogger", new Error("test"));
3640
3741
await logger.initFileLogger("../log");
3842
3943
// file and console
44+
logger.debug("i am from consoleLogger", "debug");
4045
logger.info("i am from fileLogger", { name: "zfx" });
46+
logger.log("i am from consoleLogger", "hello");
4147
logger.warn("i am from fileLogger", 1, "any");
4248
logger.error("i am from fileLogger", new Error("test"));
4349
```
@@ -307,7 +313,7 @@ interface LoggerInerface {
307313
/**
308314
* The Logger class
309315
*/
310-
export { default as Logger } from "./logger.ts";
316+
export { default as Logger, type LoggerType } from "./logger.ts";
311317
/**
312318
* The Logger class default instance
313319
*/

types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
* Types of messages that can be logged.
33
*/
44
export const enum Types {
5+
DEBUG = "debug",
56
INFO = "info",
7+
LOG = "log",
68
WARN = "warn",
79
ERROR = "error",
810
}

writer.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ export default class Writer {
1111
private maxBackupCount?: number;
1212
private pathWriterMap = new Map();
1313

14+
private [Types.DEBUG]: string = "";
1415
private [Types.INFO]: string = "";
16+
private [Types.LOG]: string = "";
1517
private [Types.WARN]: string = "";
1618
private [Types.ERROR]: string = "";
1719

0 commit comments

Comments
 (0)