小白也能写框架之【二、带颜色的日志管理器】

接上篇:小白也能写框架之【一、新建框架工程】

一、在assets目录下新建一个Core的目录,然后继续新建Scripts/Managers/LogMgr.ts

二、代码内容:

/**

 * 日志管理类,用于统一日志输出格式

 */

export class LogMgr {

    /**

     * 用于输出调试信息

     */

    static get debug() {

        return window.console.log.bind(window.console, '%c【调试】', 'color: white; background-color: #007BFF; font-weight: bold; font-size: 14px;');

    }

    /**

     * 用于输出一般信息

     */

    static get info() {

        return window.console.log.bind(window.console, '%c【信息】', 'color: white; background-color: #28A745; font-weight: bold; font-size: 14px;');

    }

    /**

     * 用于输出警告信息

     */

    static get warn() {

        return window.console.log.bind(window.console, '%c【警告】', 'color: black; background-color: #FFC107; font-weight: bold; font-size: 14px;');

    }

    /**

     * 用于输出错误信息

     */

    static get err() {

        return window.console.log.bind(window.console, '%c【错误】', 'color: white; background-color: #DC3545; font-weight: bold; font-size: 14px;');

    }

}

三、代码解释
这段代码实现了一个简单的日志管理系统,使用 TypeScript 编写。以下是对其主要功能和结构的简要介绍:

  1. LogType 枚举 :定义了四种日志类型,分别是 Debug、Info、Warn 和 Err。每种类型都有一个对应的数值。
  2. LogMgr 类 :这是日志管理器类,负责管理和输出不同类型的日志。它具有以下特点:
  • 单例模式 :通过私有构造函数和静态实例 instance 实现,确保整个应用程序中只有一个 LogMgr 实例。
  • 日志开关 :通过 isEnabled 属性控制日志输出的启用或禁用。
  • 日志配置logConfig 属性定义了每种日志类型对应的颜色和前缀文本,用于在控制台中输出时的样式和标识。
  • 日志输出方法 :提供了 debuginfowarnerr 方法,用于输出不同类型的日志信息。这些方法内部调用了 logMessage 方法,该方法根据日志类型应用相应的样式和前缀。
  1. logMgr 导出 :通过导出 logMgr 实例,其他模块可以直接使用这个单例来记录日志。

这个日志管理器的设计使得日志输出更加结构化和美观,便于在开发和调试过程中快速识别和分类日志信息。

四、全局映射
1、新建assets\Core\Scripts\Core.ts,内容为:

// 管理器

import { logMgr } from "./Managers/LogMgr";

/**

 * Core 类

 * 负责映射导出框架接口

 */

class Core {

    /** 日志管理器 */

    public log = logMgr;

}

/** 全局 Window 接口 */

declare global {

    interface Window {

        app: Core;

    }

    var app: Core;

}

/** 创建 Core 类的实例并赋值给全局 window 对象 */

window.app = new Core();

五、使用测试
1、在App目录下新建一个Main.ts然后拖入绑定到场景中的画布节点下,如图:

2、测试代码内容为:

import { _decorator, Component, Node } from 'cc';

const { ccclass, property } = _decorator;

@ccclass('Main')

export class Main extends Component {

    private testNum: number = 1314;

    private testStr: string = 'cocos';

    start() {

        app.log.debug('我是日志1');

        app.log.info('我是日志2');

        app.log.warn('我是日志3');

        app.log.err('我是日志4');

        app.log.debug('打印数字变量:', this.testNum);

       

        app.log.warn('打印文本变量:', this.testStr);

    }

    update(deltaTime: number) {

       

    }

}

六、测试效果:

下期预告:小白也能写框架之【三、分包管理器】

3赞

看帖不回的时间越来越短,想30分钟起步~ :heart_eyes: 请回帖

你这个日志其实有个问题,浏览器右侧,通常是要点击跳转到代码位置,方便定位是哪一行代码。所以日志系统其实直接用 console 更好用

1赞

确实不能跳转是致命伤,其他花里胡哨在好看价值不大

我重写了控制台方法 还加了个打印图片 至今也没用上 不过把字体放大换个颜色看着确实舒服了不少 对于打log调试的人来说还是不错的

封装的日志,不能跳转,这点是最主要的。

确实 我之前项目也注意到了

主要我习惯了个人开发,日志仅作调试输出,输出的日志在哪个地方基本心里有数。

真正遇到错误的时候,浏览器会自动爆红的,实际也可以定位跳转的!

习惯问题,谢谢指出!

这是带颜色的打印我记得ide无效 :weary: :weary:

对,我只用浏览器,方便适配屏幕这些

cocos自己的IDE调试,我不习惯用

image
可以做到带跳转,大概这么玩就行
this.log = console.log.bind(this,%c %s ,color)

6赞

嘿嘿可以啊,大佬求教,指点下

同问 :laughing:

同问 :grinning:

现在它是我的了 :upside_down_face:

我选择直接用group把堆栈打印出来,console.log.bind适合只看log,但是如果我想在log中做缓存日志就没法了

好精致的面板 :star_struck:

image

我之前代码里 也是这样实现,打印出堆栈信息

后来发现程序有错误,浏览器会自动爆红,也能跟踪,索性就简化了

目的不一样吧,我是为了在打印日志的位置保存记录,这个记录是要在游戏中展示给测试去看的,原生端游戏,测试如果想看日志或者我想回他们设备上的运行记录,只能自己封装log

哥,我没看懂,你的日志不是可以显示 使用者么?

怎么我复制到我的日志管理器里,还是显示 日志管理器 本身ne ?