@jeffchi/logger
TypeScript icon, indicating that this package has built-in type declarations

3.1.0 • Public • Published

@JeffChi/Logger

A log print output javascript tool library that can be used at the front and back ends

tested with jest NPM Package GIT Package code style: prettier JEST Report

支持环境

  • 现代浏览器。
  • 支持服务端使用, 在服务端使用时默认写入 %root%/logs/yyyy-mm-dd.log 日志文件。
IE / EdgeIE / Edge FirefoxFirefox ChromeChrome SafariSafari OperaOpera
Edge last 2 versions last 2 versions last 2 versions last 2 versions

安装

使用 npm 或 yarn 安装

npm install @jeffchi/logger --save
yarn add @jeffchi/logger

如果你的网络环境不佳,推荐使用 cnpm

用法

import { withTags, loggerWithTags } from '@jeffchi/logger';
import { LogLevel, LogMode } from '@jeffchi/logger/lib/interface';
const { debug, error, info, log, warn } = loggerWithTags(
  'api', // ['api','get'] 一个或多个tag
  {
    level: LogLevel.LOG, // 日志级别只有指定级别的日志才会输出至日志文件
    date: 'MMM dd, yyyy HH:mm:ss.sss', // 日志输出的时间戳格式,true表示使用默认utc IOS日期时间格式,false表示不输出时间戳
    env: LogMode.ALL, // 环境参数,开发版本或生产版本,如果指定开发环境,则生产环境不输出任何内容,也不会写入到日志文件
    disableWarn: false, // 禁用Warn输出,用debug代替,仅影响前端控制台和后端终端,不影响实际内容打印.在跑测试时应该启用,避免影响测试结果
    disableError: false, // 禁用Error输出,用debug代替,仅影响前端控制台和后端终端,不影响实际内容打印.在跑测试时应该启用,避免影响测试结果
    ignoreThrow: false, // 默认Error输出后,会抛出异常,从而打断后端执行流程,可指定true取消该行为,在跑测试时应该启用,避免影响测试测试流程
    outputFile: 'logs/<yyyy-MM-dd>.log', // 输出日志文件的位置,仅服务端使用时有效
  },
);

参数

loggerWithTags( tags:LogTags, options:ILogOptions );

tags

/** 日志标签 */
export type LogTags = string | string[];

options

/** 日志配置选项 */
export interface ILogOptions {
  /** 日志级别
   * @default LogLevel.LOG
   */
  level?: LogLevel;
  /**
   * 是否支持输出时间戳及时间戳格式
   *
   * 字符串格式参见: https://github.com/date-fns/date-fns/blob/main/src/format/index.ts
   * @default true 开启后默认IOS格式 'yyyy-MM-ddTHH:mm:ss.SSSZ'
   */
  date?: boolean | string;
  /**
   * 日志输出条件,默认全部输出
   * @default 'all'
   */
  env?: LogMode;
  /** 禁用warn输出,避免在测试场景下影响测试结果
   * @default false
   */
  disableWarn?: boolean;
  /** 禁用error输出,避免在测试场景下打断正常测试流程
   * @default false
   */
  disableError?: boolean;
  /** 调用error输出错误信息后,禁止继续抛出异常错误
   * @description
   * 调用error输出错误信息后,默认继续抛出异常错误,在测试环境下可以临地禁用,避免影响正常的测试流程
   */
  ignoreThrow?: boolean;
  /**
   * 基于当前工程根目录下的日志输出文件
   *
   * @description
   * 浏览器环境:自动忽略该选项;
   *
   * node环境下默认 logs/xxx.log
   * @deprecated 由output代替
   */
  outputFile?: string;
  output?: string | LogOutputOptions;
}

测试

src/__test__ 目录下的 *.spec.ts*.test.ts 是测试文件.

  • *.spec.ts 特定于指定版本的测试文件,需要切换到指定版本分支才能保证测试通过
  • *.test.ts 当前版本的测试文件

测试基于 ts-jest,终端窗口通过指定参数,来运行特定的测试文件

npm run test 1.0.3  # 1.0.3的测试文件
npm run test main   # 当前测试文件
npm run test        # 所有测试文件

构建脚本

通过运行构建脚本,可实现不同的功能

  npm run name
脚本名称 说明
clear 清理 lib/ docs/ build/临时目录
doc 利用 typedoc 生成 api 文档,位于docs/目录下
dev 启动开发模式
build 执行构建过程
format 利用 prettier 格式化
lint 依赖 tslint 对代码检查
test 依赖 jest 测试代码
push 用指定 message 提交代码并推送至远程
release [<verson>|patch|minor|major] -- [--alpha|--beta|--rc] [--all] [--dry-run] 生成新的 || 版本号,推送远程仓库后,并发布至 npm 仓
  • --alpha: 预发布内部版本
  • --beta: 预发布公测版本
  • --rc: 预发布候选版本
  • --all: 提交全部修改
  • --dry-runn: 预览操作,指定后不会执行真实的发布,否则后续需要提供 opt 口令
  • 已知问题及解决方案

    1 Webpack5 前端项目报错

    Failed to compile.
    
    Module not found: Error: Can't resolve 'fs' in '/Users/jeff/Desktop/console-x/node_modules/@jeffchi/logger/lib'
    ERROR in ./node_modules/@jeffchi/logger/lib/index.mjs 1252:133-145
    Module not found: Error: Can't resolve 'fs' in '/Users/jeff/Desktop/console-x/node_modules/@jeffchi/logger/lib'
    
    ERROR in ./node_modules/@jeffchi/logger/lib/index.mjs 1252:147-161
    Module not found: Error: Can't resolve 'path' in '/Users/jeff/Desktop/console-x/node_modules/@jeffchi/logger/lib'
    
    BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
    This is no longer the case. Verify if you need this module and configure a polyfill for it.
    
    If you want to include a polyfill, you need to:
            - add a fallback 'resolve.fallback: { "path": require.resolve("path-browserify") }'
            - install 'path-browserify'
    If you don't want to include a polyfill, you can use an empty module like this:
            resolve.fallback: { "path": false }
    
    webpack compiled with 2 errors
    No issues found.

    原因

    @jeffchi/logger 是一个前后端能用的 npm 库,在后端使用时需要写入日志文件,需要依赖于fspath 两个 node 核心库,在前端,则不需要. 早前 webpack4 会在构建 bundle 为 node.js 核心库附加庞大的 polyfills,对于前端项目,大部分的 polyfills 都不是必须的,webpack5 现在要停止这项工作,在模块构建时不再自动引入 polyfills,以减小打包体积.

    解决方案

    1. 安装 path-browserify
    npm install path-browserify --save
    # or
    yarn add path-browserify

    因为前端项目不需要写放日志文件,所以此处可以跳过这一步

    2. 配置 webpack
    // webpack.config.js
    resolve: {
      fallback: {
        // 如果需要,则引入path-browserify
        // path: require.resolve("path-browserify"),
        path: false;
      }
    }
    2.1craco

    如果你使用的是 craco:

    module.exports = {
      webpack: {
        alias: {
          // alias...
        },
    
        configure: (config) => {
          const { resolve = {} } = config;
          resolve.fallback = { ...(resolve.fallback || {}), fs: false, path: false };
          resolve.fallback.path = false;
          return { ...config, resolve };
        },
      },
      plugins: [
        // plugins...
      ],
    };
    3.修改 package.json
    "browser":{
      "path":false,
      "fs":false
    },
    "dependencies":{
      // ...
    }

    此步骤非必须

    License

    MIT

    Package Sidebar

    Install

    npm i @jeffchi/logger

    Weekly Downloads

    0

    Version

    3.1.0

    License

    MIT

    Unpacked Size

    79.8 kB

    Total Files

    6

    Last publish

    Collaborators

    • jeffchiang