# rd-web-logger

> 一个前端调试的美化插件

Latest version **1.0.1** (published 2022-04-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install rd-web-logger
pnpm add rd-web-logger
yarn add rd-web-logger
bun add rd-web-logger
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2022-04-10 |
| First published | 2022-04-03 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 35.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | axia7751 |
| Maintainers | axia7751 |
| Keywords | web-logger, log |

## Links

- npm: https://www.npmjs.com/package/rd-web-logger
- npm.io page: https://npm.io/package/rd-web-logger

## Alternatives

- [cli-color](https://npm.io/package/cli-color.md) — 3.4M weekly downloads
- [log](https://npm.io/package/log.md) — 1.3M weekly downloads
- [logstash-client](https://npm.io/package/logstash-client.md) — 4.5K weekly downloads
- [@nocobase/plugin-logger](https://npm.io/package/@nocobase/plugin-logger.md) — 2.0K weekly downloads
- [child-process-debug](https://npm.io/package/child-process-debug.md) — 695 weekly downloads

## Recent versions

- 1.0.1 (latest) — 2022-04-10
- 0.0.1 — 2022-04-03
- 1.0.0 — 2022-04-03

## README

## 前端日志调试工具

一个前端调试的美化插件

### 使用方式

#### 下载

```
npm install rd-web-logger
```

**js 环境**

```
import log from 'rd-web-logger';
log.info('rdapp ~ Code.js ~ startUp', '打印信息');
```

**vue 环境**

```
// 将log绑定在vue的原型上
import log from 'rd-web-logger';
vue.prototype.$log = log;
```

```
// vue文件中
export default {
    data() {
        return {
            number: 555,
        }
    },
    mounted() {
       this.$log.info('rdapp ~ App.vue ~ mounted', this.number);
    },
};
```

**全局使用**
由于此插件可能会在项目任何文件中都使用到，不管是引入还是挂在类实例下都比较麻烦，所以可以通过 webpack 的 ProvidePlugin 插件，注入到全局使用

```
以vue-cli4配置为例

//vue.config.js
module.exports = {
    //**其他配置项
    chainWebpack: config => {
        // 全局日志插件
        config.plugin('provide').use(webpack.ProvidePlugin, [
            {
                // {自定义变量名称: npm模块（模块需遵循commjs规范）}
                log: 'rd-web-logger',
            },
        ]);
    }
}

如果配置了eslint的话，需要在.eslintrc下增加全局变量
// .eslintrc.js
module.exports = {
    globals: {
        log: true
    },
}
```

### 功能一览

> 功能一览中的代码示例默认为 vue 开发环境，且 log 方法已作为全局方法挂在 vue 原型上

#### 日志级别
> log 的 init 方法修改 `logLevel` 可设置日志级别，关闭部分或全部日志打印

```javascript
log.init({ 
    closeDebug: false, // 是否启用 Debug 日志
    closeAll: false, // 是否关闭所有日志打印
    logLevel: 3 // 日志级别
})
```

具体禁用类型如下：

| `logLevel` | 禁用日志类型                                                 | 备注                |
| ---------- | ------------------------------------------------------------ | ------------------- |
| 0          | 所有                                                         | 等同于 `closeAll`   |
| 1          | `info` `debug` `assert` `list` `trace` `time` `timeLog` `timeEnd` `ref` `table` |                     |
| 2          | `debug`                                                      | 等同于 `closeDebug` |
| 3          | 无                                                           | default             |

#### 基础日志类型

#### <font color="#595959">info</font>

基础日志输出类型，最基础的日志输出类型，参数与 ==console.log()== 一致

```
this.$log.info('测试info', this.number);
```

![infoLog](./images/info.png)

#### <font color="#fa8c16">warn</font>

提醒日志输出类型，在有一定风险的操作但不会影响整个流程时使用，参考 ==conosle.warn()== 使用；<b style="color:orange">调试窗口会带提醒图标，可查看代码上下文信息</b>

```
this.$log.warn('测试warning', this.number);
```

![warnLog](./images/warning.png)

#### <font color="#cf1322">error</font>

错误提示输出类型，用于错误捕获的场景；<b style="color:#cf1322">调试窗口会带错误图标，可查看代码上下文信息</b>

```
try {
    throw Error('132');
} catch (error) {
    this.$log.error('测试error', error);
}
```

![errorLog](./images/error.png)

#### <font color="#820014">fatal</font>

最高级别的错误输出类型，用于项目或者模块初始化失败等严重错误场景；<b style="color:#820014">调试窗口会带错误图标，可查看代码上下文信息</b>

```
try {
    // 方法逻辑执行
    throw Error('项目启动失败');
} catch (error) {
    this.$log.fatal('测试fatal', error);
}
```

![fatalLog](./images/fatal.png)

#### <font color="#52c41a">success</font>

成功输出类型，用于方法或者流程执行成功的场景

```
this.$log.success('测试success', this.number);
```

![successLog](./images/success.png)

#### <font color="#ff4d4f">danger</font>

错误输出类型，用于捕获错误，不会在调试器里显示 error

```
this.$log.danger('测试danger', this.number);
```

![dangerLog](./images/danger.png)

#### <font color="#9254de">debug</font>

基本输出类型，用于代码或者数据调试，不会在调试器里显示 error 或 warning

```
this.$log.debug('测试debug', this.number);
```

![debugLog](./images/debug.png)

#### <font color="#3080fe">start、collapse、end</font>

日志分组，用于某个流程下的日志打印，例如说对项目初始化的日志进行分组；

> start、collapse 都是开启日志分组，二者的区别是 collapse 创建的分组默认是折叠起来的，start 创建的分组默认是展开的

-   支持最大 7 层分组；
-   如果在执行 start 方法后，当前浏览器下的所有调试日志都会进入分组中，所以 start 后一定要及时执行 end 方法对分组进行关闭；

```
// start的第一个参数相当于标识【必填】，后面属于自定义内容
log.collapse('RD ~ Core ~ 测试分组层级');
    log.start('111');
        log.start('222');
            log.start('333');
                log.start('444');
                    log.start('555');
                        log.start('666');
                            // collapse也相当于一层，所以log.start('777')将报错👇
                            log.start('777');
                            log.end();
                        log.end();
                    log.end();
                log.end();
            log.end();
        log.end();
    log.end();
log.end();
```

![groupLog](./images/group.png)

#### 其他日志类型

> 其他类型不支持对样式进行美化操作，属于 window.console 下内置的方法

##### trace

输出当前方法的执行链，用于有多层方法嵌套的情况

```
const doSubTask = (countX, countY) => {
    // eslint-disable-next-line no-plusplus
    let a = 0;
    for (let i = 0; i < countX; i++) {
        // eslint-disable-next-line no-plusplus
        for (let j = 0; j < countY; j++) {
            a += 1;
        }
    }
    return a;
};

const doTask = () => doSubTask(1000, 10000);
const total = doTask();
this.$log.trace(total);
```

![traceLog](./images/trace.png)

##### assert

断言输出，当不满足条件的时候会在调试器里显示错误信息<b style="color:#820014">调试窗口会带错误图标，可查看代码上下文信息</b>

```
this.$log.assert(1 > 2, '1大于2为false时才显示');
```

![assertLog](./images/assert.png)

##### table

在调试器里以 table 方式展示数据，能自定义需要显示的字段，可以手动调整排序便于查看数据；但是此方法有部分缺陷，显示的数据不能超过 1000 条；只能显示一层的数据，如果是<code>[{id:1,info:{name:'tom'}},{id:2,info:{name:'jerry'}}]</code>这种，info 就无法显示出来；

```
this.$log.table(this.list, ['path', 'storageKind', 'createTime']);
```

![tableLog](./images/table.png)

##### time、timeLog、timeEnd

性能监测工具，用于监测一些方法的执行时间

```
// time, timeLog, timeEnd三个方法的第一个参数必填，相当于唯一标识
// 启动时间记录
this.$log.time('testRunTime');
setTimeout(() => {
    // 获取时间过去了多久
    this.$log.timeLog('testRunTime', '获取当前时间');
}, 1000);
setTimeout(() => {
    // 结束时间记录
    this.$log.timeEnd('testRunTime');
}, 2000);
```

![timeLog](./images/time.png)

##### ref

打印 dom，用于前端开发中打印一些元素或者 vue 组件的信息

```
// template
<template>
    <div class="home">
        <el-button ref="btn">登录模拟</el-button>
        <div id="testApp">app</div>
    </div>
</template>

// js
// 输出vue组件
this.$log.ref(this.$refs.btn);
// 输出dom
this.$log.ref(document.querySelector('#testApp'));
```

vue 组件 👇
![refLog](./images/ref.png)
dom👇
![domLog](./images/ref2.png)

---
_Source: https://npm.io/package/rd-web-logger · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
