All files / log / get_logger.ts

85.71% Branches 6/7
78.95% Lines 15/19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
 
 
x34
x34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
x34
x109
x120
 
 
 
 
 
x120
x120
x243
x179
x750
x250
x250
x250
x306
x109

































































I













// Copyright 2018-2025 the Deno authors. MIT license.
// This module is browser compatible.

import { Logger } from "./logger.ts";
import { state } from "./_state.ts";

export type { Logger };

/**
 * Get a logger instance. If not specified `name`, get the default logger.
 *
 * @param name The name of the logger.
 * @returns The logger instance.
 *
 * @example Usage (without defined name and minimal setup)
 * ```ts
 * import { getLogger } from "@std/log/get-logger";
 * import "@std/log/setup";
 * import { assertEquals } from "@std/assert/equals";
 *
 * const logger = getLogger();
 * const result = logger.info("Hello world!"); // Prints "INFO Hello world!" in blue
 *
 * assertEquals(result, "Hello world!");
 * ```
 *
 * @example Usage (without defined name and custom setup)
 * ```ts
 * import { getLogger } from "@std/log/get-logger";
 * import { ConsoleHandler } from "@std/log/console-handler";
 * import { setup } from "@std/log/setup";
 * import { assertEquals } from "@std/assert/equals";
 *
 * setup({
 *   handlers: {
 *     console: new ConsoleHandler("DEBUG"),
 *   },
 *   loggers: {
 *     default: {
 *       level: "DEBUG",
 *       handlers: ["console"],
 *     },
 *   },
 * });
 *
 * const logger = getLogger();
 *
 * const result = logger.info("Hello world!"); // Prints "INFO Hello world!" in blue
 *
 * assertEquals(result, "Hello world!");
 * ```
 *
 * @example Usage (with defined name)
 * ```ts
 * import { getLogger } from "@std/log/get-logger";
 * import { assertEquals } from "@std/assert/equals";
 *
 * const logger = getLogger("my-logger");
 * const result = logger.info("Hello world!");
 *
 * assertEquals(result, "Hello world!");
 * ```
 */
export function getLogger(name?: string): Logger {
  if (!name) {
    const d = state.loggers.get("default");
    if (d === undefined) {
      throw new Error(
        `"default" logger must be set for getting logger without name`,
      );
    }
    return d;
  }
  const result = state.loggers.get(name);
  if (!result) {
    const logger = new Logger(name, "NOTSET", { handlers: [] });
    state.loggers.set(name, logger);
    return logger;
  }
  return result;
}