@qubit-ltd/logging 1.4.8 → 1.4.10

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.
Files changed (65) hide show
  1. package/README.md +25 -25
  2. package/README.zh_CN.md +12 -12
  3. package/doc/api/Logger.html +3 -3352
  4. package/doc/api/data/search.json +1 -0
  5. package/doc/api/fonts/Inconsolata-Regular.ttf +0 -0
  6. package/doc/api/fonts/OpenSans-Regular.ttf +0 -0
  7. package/doc/api/fonts/WorkSans-Bold.ttf +0 -0
  8. package/doc/api/global.html +6 -755
  9. package/doc/api/index.html +29 -248
  10. package/doc/api/scripts/core.js +726 -0
  11. package/doc/api/scripts/core.min.js +23 -0
  12. package/doc/api/scripts/resize.js +90 -0
  13. package/doc/api/scripts/search.js +265 -0
  14. package/doc/api/scripts/search.min.js +6 -0
  15. package/doc/api/scripts/{prettify → third-party}/Apache-License-2.0.txt +202 -202
  16. package/doc/api/scripts/third-party/fuse.js +9 -0
  17. package/doc/api/scripts/third-party/hljs-line-num-original.js +369 -0
  18. package/doc/api/scripts/third-party/hljs-line-num.js +1 -0
  19. package/doc/api/scripts/third-party/hljs-original.js +5171 -0
  20. package/doc/api/scripts/third-party/hljs.js +1 -0
  21. package/doc/api/scripts/third-party/popper.js +5 -0
  22. package/doc/api/scripts/third-party/tippy.js +1 -0
  23. package/doc/api/scripts/third-party/tocbot.js +672 -0
  24. package/doc/api/scripts/third-party/tocbot.min.js +1 -0
  25. package/doc/api/styles/clean-jsdoc-theme-base.css +1159 -0
  26. package/doc/api/styles/clean-jsdoc-theme-dark.css +412 -0
  27. package/doc/api/styles/clean-jsdoc-theme-light.css +482 -0
  28. package/doc/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  29. package/doc/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  30. package/doc/api/styles/clean-jsdoc-theme.min.css +1 -0
  31. package/doc/logging.min.visualization.html +1 -1
  32. package/doc/logging.visualization.html +1 -1
  33. package/package.json +2 -2
  34. package/doc/api/fonts/OpenSans-Bold-webfont.eot +0 -0
  35. package/doc/api/fonts/OpenSans-Bold-webfont.svg +0 -1838
  36. package/doc/api/fonts/OpenSans-Bold-webfont.woff +0 -0
  37. package/doc/api/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  38. package/doc/api/fonts/OpenSans-BoldItalic-webfont.svg +0 -1838
  39. package/doc/api/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  40. package/doc/api/fonts/OpenSans-Italic-webfont.eot +0 -0
  41. package/doc/api/fonts/OpenSans-Italic-webfont.svg +0 -1838
  42. package/doc/api/fonts/OpenSans-Italic-webfont.woff +0 -0
  43. package/doc/api/fonts/OpenSans-Light-webfont.eot +0 -0
  44. package/doc/api/fonts/OpenSans-Light-webfont.svg +0 -1839
  45. package/doc/api/fonts/OpenSans-Light-webfont.woff +0 -0
  46. package/doc/api/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  47. package/doc/api/fonts/OpenSans-LightItalic-webfont.svg +0 -1843
  48. package/doc/api/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  49. package/doc/api/fonts/OpenSans-Regular-webfont.eot +0 -0
  50. package/doc/api/fonts/OpenSans-Regular-webfont.svg +0 -1839
  51. package/doc/api/fonts/OpenSans-Regular-webfont.woff +0 -0
  52. package/doc/api/fonts/OpenSans-Semibold-webfont.eot +0 -0
  53. package/doc/api/fonts/OpenSans-Semibold-webfont.svg +0 -1838
  54. package/doc/api/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  55. package/doc/api/fonts/OpenSans-Semibold-webfont.woff +0 -0
  56. package/doc/api/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  57. package/doc/api/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1838
  58. package/doc/api/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  59. package/doc/api/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  60. package/doc/api/scripts/linenumber.js +0 -34
  61. package/doc/api/scripts/prettify/lang-css.js +0 -2
  62. package/doc/api/scripts/prettify/prettify.js +0 -28
  63. package/doc/api/styles/jsdoc-default.css +0 -699
  64. package/doc/api/styles/prettify-jsdoc.css +0 -120
  65. package/doc/api/styles/prettify-tomorrow.css +0 -141
@@ -1,95 +1,8 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width,initial-scale=1">
6
- <title>Home - Documentation</title>
7
-
8
- <script src="scripts/prettify/prettify.js"></script>
9
- <script src="scripts/prettify/lang-css.js"></script>
10
- <!--[if lt IE 9]>
11
- <script src="https://cdn.bootcdn.net/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
12
- <![endif]-->
13
- <link type="text/css" rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
14
- <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
15
- <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
16
- </head>
17
- <body>
18
-
19
- <input type="checkbox" id="nav-trigger" class="nav-trigger" />
20
- <label for="nav-trigger" class="navicon-button x">
21
- <div class="navicon"></div>
22
- </label>
23
-
24
- <label for="nav-trigger" class="overlay"></label>
25
-
26
- <nav>
27
- <li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="Logger.html">Logger</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#disable">disable</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#enable">enable</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#getAppender">getAppender</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#getLevel">getLevel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#getName">getName</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#log">log</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#setAppender">setAppender</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#setEnabled">setEnabled</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#setLevel">setLevel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.clearAllLoggers">clearAllLoggers</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.getDefaultAppender">getDefaultAppender</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.getDefaultLevel">getDefaultLevel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.getLogger">getLogger</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.getLoggerLevel">getLoggerLevel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.reset">reset</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.resetAllAppenders">resetAllAppenders</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.resetAllLevels">resetAllLevels</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.resetDefaultAppender">resetDefaultAppender</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.resetDefaultLevel">resetDefaultLevel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.setAllAppenders">setAllAppenders</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.setAllLevels">setAllLevels</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.setDefaultAppender">setDefaultAppender</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.setDefaultLevel">setDefaultLevel</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="Logger.html#.setLoggerLevel">setLoggerLevel</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#FACTORY_DEFAULT_APPENDER">FACTORY_DEFAULT_APPENDER</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#FACTORY_DEFAULT_LEVEL">FACTORY_DEFAULT_LEVEL</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#HasLogger">HasLogger</a></span></li><li class="nav-item"><span class="nav-item-type type-member">M</span><span class="nav-item-name"><a href="global.html#LOGGING_LEVELS">LOGGING_LEVELS</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#Log">Log</a></span></li>
28
- </nav>
29
-
30
- <div id="main">
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
- <section class="readme">
51
- <article><h1>js-logging</h1>
52
- <p><a href="https://npmjs.com/package/@qubit-ltd/logging"><img src="https://img.shields.io/npm/v/@qubit-ltd/logging.svg" alt="npm package"></a>
53
- <a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache-blue.svg" alt="License"></a>
54
- <a href="README.md"><img src="https://img.shields.io/badge/Document-English-blue.svg" alt="English Document"></a>
55
- <a href="https://dl.circleci.com/status-badge/redirect/gh/Haixing-Hu/js-logging/tree/master"><img src="https://dl.circleci.com/status-badge/img/gh/Haixing-Hu/js-logging/tree/master.svg?style=shield" alt="CircleCI"></a>
56
- <a href="https://coveralls.io/github/Haixing-Hu/js-logging?branch=master"><img src="https://coveralls.io/repos/github/Haixing-Hu/js-logging/badge.svg?branch=master" alt="Coverage Status"></a></p>
57
- <p><a href="https://npmjs.com/package/@qubit-ltd/logging">@qubit-ltd/logging</a> 是一个 JavaScript 库,通过装饰器为类方法和属性提供强大的日志记录功能。
58
- 该库旨在与<a href="https://github.com/Haixing-Hu/vue3-class-component/">Vue.js 类组件</a>无缝集成,为处理 JavaScript 项目中的日志记录提供了优雅的解决方案。</p>
59
- <h2>特性</h2>
60
- <ul>
61
- <li>📝 简单灵活的日志接口,支持不同的日志级别</li>
62
- <li>🔍 支持带占位符的格式化日志消息</li>
63
- <li>🎯 自动方法日志记录和类日志集成的装饰器</li>
64
- <li>🔄 与Vue.js类组件无缝集成</li>
65
- <li>🎛️ 可配置的日志级别和输出器</li>
66
- <li>🌐 全局和单独的日志记录器管理</li>
67
- <li>📋 支持浏览器控制台和自定义输出器</li>
68
- </ul>
69
- <h2>安装</h2>
70
- <p>使用 npm 或 yarn 安装该库:</p>
71
- <pre class="prettyprint source lang-sh"><code>npm install @qubit-ltd/logging
72
- </code></pre>
73
- <p>或</p>
74
- <pre class="prettyprint source lang-sh"><code>yarn add @qubit-ltd/logging
75
- </code></pre>
76
- <h2><code>Logger</code> 类</h2>
77
- <p><code>Logger</code> 类提供了一个简单而灵活的日志记录接口。</p>
78
- <h3>获取或创建 Logger</h3>
79
- <p>你可以通过调用静态方法 <code>Logger.getLogger(name, options)</code> 获取一个 <code>Logger</code> 实例,其中:</p>
80
- <ul>
81
- <li><code>name</code> 是 logger 的标识符。如果已经存在具有相同名称的 logger,则返回该实例;否则将创建一个新的 logger。</li>
82
- <li><code>options</code>(可选)是一个对象,可能包括:
83
- <ul>
84
- <li><code>appender: object</code>:指定日志消息的输出目的地。此对象必须实现 <code>trace</code>、<code>debug</code>、<code>info</code>、<code>warn</code> 和 <code>error</code> 方法。
85
- 如果省略,将使用 logger 的现有 appender,或者为新创建的 logger 分配默认 appender。</li>
86
- <li><code>level: string</code>:定义日志记录级别(<code>TRACE</code>、<code>DEBUG</code>、<code>INFO</code>、<code>WARN</code>、<code>ERROR</code>、<code>NONE</code>)。不区分大小写。
87
- 如果省略,将使用 logger 的现有日志级别,或者为新创建的 logger 分配默认日志级别。</li>
88
- </ul>
89
- </li>
90
- </ul>
91
- <p>示例:</p>
92
- <pre class="prettyprint source lang-javascript"><code>import Logger from '@qubit-ltd/logging';
1
+ <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Home</title><!--[if lt IE 9]>
2
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="Logger.html">Logger</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#FACTORY_DEFAULT_APPENDER">FACTORY_DEFAULT_APPENDER</a></div><div class="sidebar-section-children"><a href="global.html#FACTORY_DEFAULT_LEVEL">FACTORY_DEFAULT_LEVEL</a></div><div class="sidebar-section-children"><a href="global.html#HasLogger">HasLogger</a></div><div class="sidebar-section-children"><a href="global.html#LOGGING_LEVELS">LOGGING_LEVELS</a></div><div class="sidebar-section-children"><a href="global.html#Log">Log</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section class="readme"><article><h1>js-logging</h1><p><a href="https://npmjs.com/package/@qubit-ltd/logging"><img src="https://img.shields.io/npm/v/@qubit-ltd/logging.svg" alt="npm package"></a><a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache-blue.svg" alt="License"></a><a href="README.md"><img src="https://img.shields.io/badge/Document-English-blue.svg" alt="English Document"></a><a href="https://dl.circleci.com/status-badge/redirect/gh/Haixing-Hu/js-logging/tree/master"><img src="https://dl.circleci.com/status-badge/img/gh/Haixing-Hu/js-logging/tree/master.svg?style=shield" alt="CircleCI"></a><a href="https://coveralls.io/github/Haixing-Hu/js-logging?branch=master"><img src="https://coveralls.io/repos/github/Haixing-Hu/js-logging/badge.svg?branch=master" alt="Coverage Status"></a></p><p><a href="https://npmjs.com/package/@qubit-ltd/logging">@qubit-ltd/logging</a> 是一个 JavaScript 库,通过装饰器为类方法和属性提供强大的日志记录功能。 该库旨在与<a href="https://github.com/Haixing-Hu/vue3-class-component/">Vue.js 类组件</a>无缝集成,为处理 JavaScript 项目中的日志记录提供了优雅的解决方案。</p><h2>特性</h2><ul><li>📝 简单灵活的日志接口,支持不同的日志级别</li><li>🔍 支持带占位符的格式化日志消息</li><li>🎯 自动方法日志记录和类日志集成的装饰器</li><li>🔄 与Vue.js类组件无缝集成</li><li>🎛️ 可配置的日志级别和输出器</li><li>🌐 全局和单独的日志记录器管理</li><li>📋 支持浏览器控制台和自定义输出器</li></ul><h2>安装</h2><p>使用 npm 或 yarn 安装该库:</p><pre class="prettyprint source lang-sh"><code>npm install @qubit-ltd/logging
4
+ </code></pre><p>或</p><pre class="prettyprint source lang-sh"><code>yarn add @qubit-ltd/logging
5
+ </code></pre><h2>Logger 类</h2><p><code>Logger</code> 类提供了一个简单而灵活的日志记录接口。</p><h3>获取或创建 Logger</h3><p>你可以通过调用静态方法 <code>Logger.getLogger(name, options)</code> 获取一个 <code>Logger</code> 实例,其中:</p><ul><li><code>name</code> 是 logger 的标识符。如果已经存在具有相同名称的 logger,则返回该实例;否则将创建一个新的 logger。</li><li><code>options</code>(可选)是一个对象,可能包括:<ul><li><code>appender: object</code>:指定日志消息的输出目的地。此对象必须实现 <code>trace</code>、<code>debug</code>、<code>info</code>、<code>warn</code> 和 <code>error</code> 方法。 如果省略,将使用 logger 的现有 appender,或者为新创建的 logger 分配默认 appender。</li><li><code>level: string</code>:定义日志记录级别(<code>TRACE</code>、<code>DEBUG</code>、<code>INFO</code>、<code>WARN</code>、<code>ERROR</code>、<code>NONE</code>)。不区分大小写。 如果省略,将使用 logger 的现有日志级别,或者为新创建的 logger 分配默认日志级别。</li></ul></li></ul><p>示例:</p><pre class="prettyprint source lang-javascript"><code>import Logger from '@qubit-ltd/logging';
93
6
 
94
7
  // 创建一个使用默认设置的logger
95
8
  const logger1 = Logger.getLogger('MyLogger');
@@ -106,26 +19,7 @@ const customAppender = {
106
19
  error: (message, ...args) => { /* 自定义error实现 */ },
107
20
  };
108
21
  const logger3 = Logger.getLogger('CustomLogger', { appender: customAppender, level: 'INFO' });
109
- </code></pre>
110
- <h3>记录日志消息</h3>
111
- <ul>
112
- <li><code>logger.trace(message, ...args)</code>:记录一个 trace 级别的消息。</li>
113
- <li><code>logger.debug(message, ...args)</code>:记录一个 debug 级别的消息。</li>
114
- <li><code>logger.info(message, ...args)</code>:记录一个 info 级别的消息。</li>
115
- <li><code>logger.warn(message, ...args)</code>:记录一个警告级别的消息。</li>
116
- <li><code>logger.error(message, ...args)</code>:记录一个错误级别的消息。</li>
117
- <li><code>logger.log(level, message, ...args)</code>:以指定的日志级别记录消息。</li>
118
- </ul>
119
- <p>你可以在日志消息中使用占位符动态插入变量:</p>
120
- <ul>
121
- <li><code>%o</code> 或 <code>%O</code>:JavaScript 对象输出。点击对象名称可以在检查器中查看更多信息。</li>
122
- <li><code>%d</code> 或 <code>%i</code>:整数输出(支持格式化)。例如,<code>logger.info('Foo %.2d', 1.1)</code> 将数字输出为两位有效数字并带有前导0:
123
- <code>Foo 01</code>。</li>
124
- <li><code>%s</code>:字符串输出。</li>
125
- <li><code>%f</code>:浮点数输出(支持格式化)。例如,<code>logger.debug(&quot;Foo %.2f&quot;, 1.1)</code> 将数字输出为两位小数:<code>Foo 1.10</code>。</li>
126
- </ul>
127
- <p>示例:</p>
128
- <pre class="prettyprint source lang-javascript"><code>import Logger from '@qubit-ltd/logging';
22
+ </code></pre><h3>记录日志消息</h3><ul><li><code>logger.trace(message, ...args)</code>:记录一个 trace 级别的消息。</li><li><code>logger.debug(message, ...args)</code>:记录一个 debug 级别的消息。</li><li><code>logger.info(message, ...args)</code>:记录一个 info 级别的消息。</li><li><code>logger.warn(message, ...args)</code>:记录一个警告级别的消息。</li><li><code>logger.error(message, ...args)</code>:记录一个错误级别的消息。</li><li><code>logger.log(level, message, ...args)</code>:以指定的日志级别记录消息。</li></ul><p>你可以在日志消息中使用占位符动态插入变量:</p><ul><li><code>%o</code> 或 <code>%O</code>:JavaScript 对象输出。点击对象名称可以在检查器中查看更多信息。</li><li><code>%d</code> 或 <code>%i</code>:整数输出(支持格式化)。例如,<code>logger.info('Foo %.2d', 1.1)</code> 将数字输出为两位有效数字并带有前导0: <code>Foo 01</code>。</li><li><code>%s</code>:字符串输出。</li><li><code>%f</code>:浮点数输出(支持格式化)。例如,<code>logger.debug(&quot;Foo %.2f&quot;, 1.1)</code> 将数字输出为两位小数:<code>Foo 1.10</code>。</li></ul><p>示例:</p><pre class="prettyprint source lang-javascript"><code>import Logger from '@qubit-ltd/logging';
129
23
 
130
24
  const logger = Logger.getLogger('MyClass');
131
25
  logger.trace('This is a trace message with argument %s and argument %o', 'foo', { bar: 'baz' });
@@ -135,21 +29,7 @@ logger.warn('This is a warning message with argument %s and argument %o', 'foo',
135
29
  logger.error('This is an error message with argument %s and argument %o', 'foo', { bar: 'baz' });
136
30
  const level = 'info';
137
31
  logger.log(level, 'This is an %s message with argument %s and argument %o', level, 'foo', { bar: 'baz' });
138
- </code></pre>
139
- <h3>设置日志级别</h3>
140
- <p>使用 <code>logger.setLevel(level)</code> 调整 logger 的日志级别。</p>
141
- <p>可用的日志级别(从最详细到最简略):</p>
142
- <ul>
143
- <li><code>TRACE</code>:用于调试目的的最详细信息</li>
144
- <li><code>DEBUG</code>:一般调试信息</li>
145
- <li><code>INFO</code>:关于应用程序进度的一般信息</li>
146
- <li><code>WARN</code>:可能需要注意的警告情况</li>
147
- <li><code>ERROR</code>:需要处理的错误条件</li>
148
- <li><code>NONE</code>:完全禁用日志记录</li>
149
- </ul>
150
- <p>所有级别名称不区分大小写。</p>
151
- <p>示例:</p>
152
- <pre class="prettyprint source lang-javascript"><code>const logger = Logger.getLogger('MyClass');
32
+ </code></pre><h3>设置日志级别</h3><p>使用 <code>logger.setLevel(level)</code> 调整 logger 的日志级别。</p><p>可用的日志级别(从最详细到最简略):</p><ul><li><code>TRACE</code>:用于调试目的的最详细信息</li><li><code>DEBUG</code>:一般调试信息</li><li><code>INFO</code>:关于应用程序进度的一般信息</li><li><code>WARN</code>:可能需要注意的警告情况</li><li><code>ERROR</code>:需要处理的错误条件</li><li><code>NONE</code>:完全禁用日志记录</li></ul><p>所有级别名称不区分大小写。</p><p>示例:</p><pre class="prettyprint source lang-javascript"><code>const logger = Logger.getLogger('MyClass');
153
33
 
154
34
  // 将级别更改为只显示警告和错误
155
35
  logger.setLevel('WARN');
@@ -162,18 +42,7 @@ logger.info('这条信息消息不会显示');
162
42
  // 这些会显示
163
43
  logger.warn('这条警告消息会显示');
164
44
  logger.error('这条错误消息会显示');
165
- </code></pre>
166
- <h3>设置日志 Appender</h3>
167
- <p>使用 <code>logger.setAppender(appender)</code> 为 logger 分配一个自定义的 appender 对象,该对象定义了以下方法:</p>
168
- <ul>
169
- <li><code>trace(message, ...args)</code></li>
170
- <li><code>debug(message, ...args)</code></li>
171
- <li><code>info(message ...args)</code></li>
172
- <li><code>warn(message, ...args)</code></li>
173
- <li><code>error(message, ...args)</code></li>
174
- </ul>
175
- <p>示例:</p>
176
- <pre class="prettyprint source lang-javascript"><code>const logger = Logger.getLogger('MyClass');
45
+ </code></pre><h3>设置日志 Appender</h3><p>使用 <code>logger.setAppender(appender)</code> 为 logger 分配一个自定义的 appender 对象,该对象定义了以下方法:</p><ul><li><code>trace(message, ...args)</code></li><li><code>debug(message, ...args)</code></li><li><code>info(message ...args)</code></li><li><code>warn(message, ...args)</code></li><li><code>error(message, ...args)</code></li></ul><p>示例:</p><pre class="prettyprint source lang-javascript"><code>const logger = Logger.getLogger('MyClass');
177
46
  logger.setAppender(console); // 将日志消息输出到控制台
178
47
 
179
48
  // 或者创建一个为所有日志添加时间戳的自定义输出器
@@ -185,15 +54,7 @@ const timestampAppender = {
185
54
  error: (message, ...args) => console.error(`[${new Date().toISOString()}] ${message}`, ...args),
186
55
  };
187
56
  logger.setAppender(timestampAppender);
188
- </code></pre>
189
- <h3>启用或禁用日志记录</h3>
190
- <ul>
191
- <li><code>logger.enable()</code>:启用日志记录。</li>
192
- <li><code>logger.disable()</code>:禁用日志记录。</li>
193
- <li><code>logger.setEnabled(enabled)</code>:动态控制日志记录的启用与禁用。</li>
194
- </ul>
195
- <p>示例:</p>
196
- <pre class="prettyprint source lang-javascript"><code>const logger = Logger.getLogger('MyClass');
57
+ </code></pre><h3>启用或禁用日志记录</h3><ul><li><code>logger.enable()</code>:启用日志记录。</li><li><code>logger.disable()</code>:禁用日志记录。</li><li><code>logger.setEnabled(enabled)</code>:动态控制日志记录的启用与禁用。</li></ul><p>示例:</p><pre class="prettyprint source lang-javascript"><code>const logger = Logger.getLogger('MyClass');
197
58
 
198
59
  // 暂时禁用所有日志
199
60
  logger.disable();
@@ -206,15 +67,7 @@ logger.info('此消息会被记录');
206
67
  // 使用条件控制日志记录
207
68
  const debugMode = process.env.NODE_ENV === 'development';
208
69
  logger.setEnabled(debugMode);
209
- </code></pre>
210
- <h3>管理日志记录器</h3>
211
- <ul>
212
- <li><code>Logger.clearAllLoggers()</code>:清除所有已注册的日志记录器。</li>
213
- <li><code>Logger.getLevel(name)</code>:获取特定日志记录器的日志级别。</li>
214
- <li><code>Logger.setLevel(name, level)</code>:设置特定日志记录器的日志级别。</li>
215
- </ul>
216
- <p>示例:</p>
217
- <pre class="prettyprint source lang-javascript"><code>// 创建多个日志记录器
70
+ </code></pre><h3>管理日志记录器</h3><ul><li><code>Logger.clearAllLoggers()</code>:清除所有已注册的日志记录器。</li><li><code>Logger.getLevel(name)</code>:获取特定日志记录器的日志级别。</li><li><code>Logger.setLevel(name, level)</code>:设置特定日志记录器的日志级别。</li></ul><p>示例:</p><pre class="prettyprint source lang-javascript"><code>// 创建多个日志记录器
218
71
  const apiLogger = Logger.getLogger('API');
219
72
  const uiLogger = Logger.getLogger('UI');
220
73
  const dbLogger = Logger.getLogger('Database');
@@ -229,19 +82,7 @@ console.log(`UI Logger级别: ${uiLevel}`);
229
82
 
230
83
  // 关闭应用程序时清除所有日志记录器
231
84
  Logger.clearAllLoggers();
232
- </code></pre>
233
- <h3>默认级别和 Appender</h3>
234
- <p>当创建一个新日志记录器时,如果没有指定级别或 appender,将使用默认的日志级别和 appender。</p>
235
- <ul>
236
- <li><code>Logger.getDefaultLevel()</code>:获取默认日志级别。</li>
237
- <li><code>Logger.setDefaultLevel(level)</code>:设置默认日志级别。</li>
238
- <li><code>Logger.resetDefaultLevel()</code>:将默认日志级别重置为出厂值。</li>
239
- <li><code>Logger.getDefaultAppender()</code>:获取默认日志 appender。</li>
240
- <li><code>Logger.setDefaultAppender(appender)</code>:设置默认日志 appender。</li>
241
- <li><code>Logger.resetDefaultAppender()</code>:将默认日志 appender 重置为出厂值。</li>
242
- </ul>
243
- <p>示例:</p>
244
- <pre class="prettyprint source lang-javascript"><code>// 获取当前默认级别
85
+ </code></pre><h3>默认级别和 Appender</h3><p>当创建一个新日志记录器时,如果没有指定级别或 appender,将使用默认的日志级别和 appender。</p><ul><li><code>Logger.getDefaultLevel()</code>:获取默认日志级别。</li><li><code>Logger.setDefaultLevel(level)</code>:设置默认日志级别。</li><li><code>Logger.resetDefaultLevel()</code>:将默认日志级别重置为出厂值。</li><li><code>Logger.getDefaultAppender()</code>:获取默认日志 appender。</li><li><code>Logger.setDefaultAppender(appender)</code>:设置默认日志 appender。</li><li><code>Logger.resetDefaultAppender()</code>:将默认日志 appender 重置为出厂值。</li></ul><p>示例:</p><pre class="prettyprint source lang-javascript"><code>// 获取当前默认级别
245
86
  const defaultLevel = Logger.getDefaultLevel();
246
87
  console.log(`默认日志级别: ${defaultLevel}`);
247
88
 
@@ -253,16 +94,7 @@ const logger = Logger.getLogger('NewLogger'); // 将具有DEBUG级别
253
94
 
254
95
  // 重置为原始的工厂默认级别
255
96
  Logger.resetDefaultLevel();
256
- </code></pre>
257
- <h3>全局日志管理</h3>
258
- <ul>
259
- <li><code>Logger.setAllLevels(level)</code>:将指定日志级别应用于所有现有日志记录器。</li>
260
- <li><code>Logger.resetAllLevels()</code>:将所有现有日志记录器的日志级别重置为默认日志级别。</li>
261
- <li><code>Logger.setAllAppenders(appender)</code>:将指定日志 appender 应用于所有现有日志记录器。</li>
262
- <li><code>Logger.resetAllAppenders()</code>:将所有现有日志记录器的日志 appender 重置为默认 appender。</li>
263
- </ul>
264
- <p>示例:</p>
265
- <pre class="prettyprint source lang-javascript"><code>// 创建几个具有不同级别的日志记录器
97
+ </code></pre><h3>全局日志管理</h3><ul><li><code>Logger.setAllLevels(level)</code>:将指定日志级别应用于所有现有日志记录器。</li><li><code>Logger.resetAllLevels()</code>:将所有现有日志记录器的日志级别重置为默认日志级别。</li><li><code>Logger.setAllAppenders(appender)</code>:将指定日志 appender 应用于所有现有日志记录器。</li><li><code>Logger.resetAllAppenders()</code>:将所有现有日志记录器的日志 appender 重置为默认 appender。</li></ul><p>示例:</p><pre class="prettyprint source lang-javascript"><code>// 创建几个具有不同级别的日志记录器
266
98
  const logger1 = Logger.getLogger('Logger1', { level: 'TRACE' });
267
99
  const logger2 = Logger.getLogger('Logger2', { level: 'INFO' });
268
100
  const logger3 = Logger.getLogger('Logger3', { level: 'ERROR' });
@@ -281,20 +113,10 @@ Logger.resetAllLevels();
281
113
  // 将自定义输出器应用于所有现有的日志记录器
282
114
  const fileAppender = { /* ... 记录到文件的实现 ... */ };
283
115
  Logger.setAllAppenders(fileAppender);
284
- </code></pre>
285
- <h3>重置日志记录器</h3>
286
- <ul>
287
- <li><code>Logger.reset()</code>:将日志记录器重置为出厂状态。这将清除所有已注册的日志记录器、重置默认日志级别和默认日志 appender。</li>
288
- </ul>
289
- <p>示例:</p>
290
- <pre class="prettyprint source lang-javascript"><code>// 在对日志记录器和默认设置进行多次修改后
116
+ </code></pre><h3>重置日志记录器</h3><ul><li><code>Logger.reset()</code>:将日志记录器重置为出厂状态。这将清除所有已注册的日志记录器、重置默认日志级别和默认日志 appender。</li></ul><p>示例:</p><pre class="prettyprint source lang-javascript"><code>// 在对日志记录器和默认设置进行多次修改后
291
117
  // 这一个调用将一切重置为工厂设置
292
118
  Logger.reset();
293
- </code></pre>
294
- <h2><code>@Log</code> 装饰器</h2>
295
- <p><code>@Log</code> 装饰器会自动记录方法签名,包括类名、方法名和参数。</p>
296
- <p>示例:</p>
297
- <pre class="prettyprint source lang-javascript"><code>import { Log } from '@qubit-ltd/logging';
119
+ </code></pre><h2>@Log 装饰器</h2><p><code>@Log</code> 装饰器会自动记录方法签名,包括类名、方法名和参数。</p><p>示例:</p><pre class="prettyprint source lang-javascript"><code>import { Log } from '@qubit-ltd/logging';
298
120
 
299
121
  class Person {
300
122
  @Log
@@ -302,7 +124,7 @@ class Person {
302
124
  // 方法实现
303
125
  return `正在吃${meal.name}`;
304
126
  }
305
-
127
+
306
128
  // Log装饰器的自定义选项
307
129
  @Log({ level: 'INFO', withResult: true })
308
130
  calculateCalories(food, amount) {
@@ -313,23 +135,19 @@ class Person {
313
135
 
314
136
  const person = new Person();
315
137
  const meal = { name: '早餐', type: '健康' };
316
- person.eat(meal);
138
+ person.eat(meal);
317
139
  // 记录: &quot;Person.eat({&quot;name&quot;:&quot;早餐&quot;,&quot;type&quot;:&quot;健康&quot;})&quot;
318
140
 
319
141
  const calories = person.calculateCalories({ caloriesPerUnit: 50 }, 4);
320
142
  // 记录: &quot;Person.calculateCalories({&quot;caloriesPerUnit&quot;:50}, 4) => 200&quot;
321
- </code></pre>
322
- <h2><code>@HasLogger</code> 装饰器</h2>
323
- <p><code>@HasLogger</code> 装饰器会为类添加一个命名的日志记录器,可以通过 <code>logger</code> 属性访问。</p>
324
- <p>示例:</p>
325
- <pre class="prettyprint source lang-javascript"><code>import { HasLogger } from '@qubit-ltd/logging';
143
+ </code></pre><h2>@HasLogger 装饰器</h2><p><code>@HasLogger</code> 装饰器会为类添加一个命名的日志记录器,可以通过 <code>logger</code> 属性访问。</p><p>示例:</p><pre class="prettyprint source lang-javascript"><code>import { HasLogger } from '@qubit-ltd/logging';
326
144
 
327
145
  @HasLogger
328
146
  class MyClass {
329
147
  foo() {
330
148
  this.logger.debug('这是MyClass.foo()');
331
149
  }
332
-
150
+
333
151
  bar(param) {
334
152
  this.logger.info('使用参数处理: %o', param);
335
153
  // 使用param做一些事情
@@ -343,10 +161,7 @@ class MyClass {
343
161
  const instance = new MyClass();
344
162
  instance.foo();
345
163
  instance.bar({ value: -5 });
346
- </code></pre>
347
- <h2>与 Vue.js 类组件一起使用</h2>
348
- <p>你可以在<a href="https://github.com/Haixing-Hu/vue3-class-component/">Vue.js 类组件</a>中使用 <code>@Log</code> 和 <code>@HasLogger</code> 装饰器:</p>
349
- <pre class="prettyprint source lang-javascript"><code>import { HasLogger, Log } from '@qubit-ltd/logging';
164
+ </code></pre><h2>与 Vue.js 类组件一起使用</h2><p>你可以在<a href="https://github.com/Haixing-Hu/vue3-class-component/">Vue.js 类组件</a>中使用 <code>@Log</code> 和 <code>@HasLogger</code> 装饰器:</p><pre class="prettyprint source lang-javascript"><code>import { HasLogger, Log } from '@qubit-ltd/logging';
350
165
  import { Component, toVue } from '@qubit-ltd/vue3-class-component';
351
166
 
352
167
  @Component({
@@ -354,15 +169,15 @@ import { Component, toVue } from '@qubit-ltd/vue3-class-component';
354
169
  })
355
170
  @HasLogger
356
171
  class MyComponent {
357
-
172
+
358
173
  message = 'hello world';
359
-
174
+
360
175
  @Log
361
176
  foo() {
362
177
  this.logger.debug('这是MyComponent.foo()');
363
178
  this.message = '点击于 ' + new Date().toLocaleTimeString();
364
179
  }
365
-
180
+
366
181
  @Log({ level: 'INFO' })
367
182
  async fetchData() {
368
183
  try {
@@ -379,17 +194,12 @@ class MyComponent {
379
194
  }
380
195
 
381
196
  export default toVue(MyComponent);
382
- </code></pre>
383
- <p><strong>注意</strong>:<code>@HasLogger</code> 装饰器必须放在 <code>@Component</code> 装饰器的<strong>后面</strong>。</p>
384
- <h2>高级用法</h2>
385
- <h3>创建自定义输出器</h3>
386
- <p>你可以创建自定义输出器将日志定向到不同的目的地:</p>
387
- <pre class="prettyprint source lang-javascript"><code>// 文件日志输出器(Node.js示例)
197
+ </code></pre><p><strong>注意</strong>:<code>@HasLogger</code> 装饰器必须放在 <code>@Component</code> 装饰器的<strong>后面</strong>。</p><h2>高级用法</h2><h3>创建自定义输出器</h3><p>你可以创建自定义输出器将日志定向到不同的目的地:</p><pre class="prettyprint source lang-javascript"><code>// 文件日志输出器(Node.js示例)
388
198
  import fs from 'fs';
389
199
 
390
200
  const fileAppender = {
391
201
  _writeToFile(level, message, ...args) {
392
- const formattedArgs = args.map(arg =>
202
+ const formattedArgs = args.map(arg =>
393
203
  typeof arg === 'object' ? JSON.stringify(arg) : String(arg)
394
204
  );
395
205
  const logEntry = `[${new Date().toISOString()}] [${level}] ${message} ${formattedArgs.join(' ')}\n`;
@@ -404,28 +214,22 @@ const fileAppender = {
404
214
 
405
215
  // 使用自定义输出器
406
216
  const logger = Logger.getLogger('AppLogger', { appender: fileAppender });
407
- </code></pre>
408
- <h3>条件日志记录</h3>
409
- <pre class="prettyprint source lang-javascript"><code>import Logger from '@qubit-ltd/logging';
217
+ </code></pre><h3>条件日志记录</h3><pre class="prettyprint source lang-javascript"><code>import Logger from '@qubit-ltd/logging';
410
218
 
411
219
  function processData(data, options = {}) {
412
220
  const logger = Logger.getLogger('DataProcessor');
413
-
221
+
414
222
  // 仅在明确请求时启用调试日志
415
223
  if (options.debug) {
416
224
  logger.setLevel('DEBUG');
417
225
  } else {
418
226
  logger.setLevel('INFO');
419
227
  }
420
-
228
+
421
229
  logger.debug('使用选项处理数据: %o', options);
422
230
  // 函数的其余部分
423
231
  }
424
- </code></pre>
425
- <h2><span id="contributing">贡献</span></h2>
426
- <p>如果您发现任何问题或有改进建议,请随时在<a href="https://github.com/Haixing-Hu/js-logging">GitHub 仓库</a>上提交 issue 或 pull request。</p>
427
- <h3>开发设置</h3>
428
- <pre class="prettyprint source lang-bash"><code># 克隆仓库
232
+ </code></pre><h2><span id="contributing">贡献</span></h2><p>如果您发现任何问题或有改进建议,请随时在<a href="https://github.com/Haixing-Hu/js-logging">GitHub 仓库</a>上提交 issue 或 pull request。</p><h3>开发设置</h3><pre class="prettyprint source lang-bash"><code># 克隆仓库
429
233
  git clone https://github.com/Haixing-Hu/js-logging.git
430
234
  cd js-logging
431
235
 
@@ -437,27 +241,4 @@ yarn test
437
241
 
438
242
  # 构建库
439
243
  yarn build
440
- </code></pre>
441
- <h2><span id="license">许可证</span></h2>
442
- <p><a href="https://npmjs.com/package/@qubit-ltd/logging">@qubit-ltd/logging</a> 根据 Apache 2.0 许可证分发。详情请参阅 <a href="LICENSE">LICENSE</a> 文件。</p></article>
443
- </section>
444
-
445
-
446
-
447
-
448
-
449
-
450
- </div>
451
-
452
- <br class="clear">
453
-
454
- <footer>
455
- Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a>
456
- on Wed Apr 16 2025 17:13:07 GMT+0800 (China Standard Time)
457
- using the <a href="https://github.com/Haixing-Hu/jsdoc-minami">customized Minami theme</a>.
458
- </footer>
459
-
460
- <script>prettyPrint();</script>
461
- <script src="scripts/linenumber.js"></script>
462
- </body>
463
- </html>
244
+ </code></pre><h2><span id="license">许可证</span></h2><p><a href="https://npmjs.com/package/@qubit-ltd/logging">@qubit-ltd/logging</a> 根据 Apache 2.0 许可证分发。详情请参阅 <a href="LICENSE">LICENSE</a> 文件。</p></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="Logger.html">Logger</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#FACTORY_DEFAULT_APPENDER">FACTORY_DEFAULT_APPENDER</a></div><div class="sidebar-section-children"><a href="global.html#FACTORY_DEFAULT_LEVEL">FACTORY_DEFAULT_LEVEL</a></div><div class="sidebar-section-children"><a href="global.html#HasLogger">HasLogger</a></div><div class="sidebar-section-children"><a href="global.html#LOGGING_LEVELS">LOGGING_LEVELS</a></div><div class="sidebar-section-children"><a href="global.html#Log">Log</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>