JavaScript通用日志对象

日志对象


日志对象是一个用于在控制台输出不同级别的日志信息的工具。它提供了一系列的方法,包括trace()、debug()、info()、warn()和error(),可以根据不同的需求选择合适的方法来记录日志。

简介


日志对象是一个方便的工具,可用于在调试和开发过程中输出日志信息,以帮助我们理解程序的执行流程和问题所在。它可以按照不同的日志级别输出不同的日志信息,并且支持自定义样式来美化输出效果。

使用教程

  • 引入日志对象

    首先,需要将日志对象的代码引入到项目中。可以将代码复制到项目的脚本文件中,或者通过其他方式引入代码。

  • 输出日志信息

    使用日志对象提供的方法来输出日志信息,例如:

zhongjyuan.logger.trace('This is a trace message');
zhongjyuan.logger.debug('This is a debug message');
zhongjyuan.logger.info('This is an info message');
zhongjyuan.logger.warn('This is a warning message');
zhongjyuan.logger.error('This is an error message');

每个方法接受一个或多个参数,这些参数将被格式化并输出到控制台。

  • 样式定制(可选)

    如果希望自定义日志信息的样式,可以修改日志对象中定义的样式变量。例如,可以更改前缀样式、时间样式和正文样式来适应自己的需求。

代码片段

/**
 * 日志对象
 * @author zhongjyuan
 * @date   2023年5月12日11:43:59
 * @email  zhongjyuan@outlook.com
 */

zhongjyuan.logger = (function ({
 /**前缀样式 */
 const prefixStyle = "color: ${0}; background: ${1}; padding: 3px; border-radius: 3px 0 0 3px;";
 /**时间样式 */
 const timestampStyle = "color: ${0}; background: ${1}; padding: 3px; border-radius: 0 0 0 0;";
 /**正文样式 */
 const contentStyle = "color: ${0}; background: ${1}; padding: 3px; border-radius: 0 3px 3px 0;";
 /**堆栈样式 */
 const stackStyle = "color: ${0}; background: ${1}; padding: 3px; border-radius: 3px 3px 3px 3px; margin: 3px";

 /**
  * 是否支持控制台方法
  * @author zhongjyuan
  * @date   2023年5月12日11:46:18
  * @email  zhongjyuan@outlook.com
  * @param {*} method 方法
  * @returns
  */

 function isConsoleMethodSupported(method{
  return window.console && typeof console[method] === "function";
 }

 /**
  * 格式化字符串
  * @returns {string} 格式化后的字符串
  * @example
  * const message = format("Hello, ${0}! Today is ${1}.", "Alice", "Monday");
  * console.log(message); // "Hello, Alice! Today is Monday."
  */

 function format({
  var num = arguments.length;
  if (num < 1return "";

  var content = arguments[0];
  for (var i = 1; i < num; i++) {
   var pattern = "\\$\\{" + (i - 1) + "\\}";
   var re = new RegExp(pattern, "g");
   content = content.replace(re, arguments[i]);
  }
  return content;
 }

 /**
  * 格式化正文
  * @returns {string} 格式化后的正文
  */

 function contentFormat({
  const args = Array.from(arguments);
  const logLevel = args.pop();
  if (logLevel > zhongjyuan.config.logger.levels.TRACE) return "";

  var content = format(...args);
  var timestamp = new Date().format("ap hh:mm:ss:S");
  var stack = zhongjyuan.config.logger.stack.includes(logLevel) ? new Error().stack.split("\n").slice(3).join("\n") : "";

  return `%c ${zhongjyuan.config.logger.prefix} - ${zhongjyuan.config.logger.statement} %c ${timestamp} %c ${content} \n%c${stack}`;
 }

 /**
  * trace日志
  * @author zhongjyuan
  * @date   2023年6月1日16:13:40
  * @email  zhongjyuan@outlook.com
  */

 function trace({
  if (isConsoleMethodSupported("trace")) {
   console.trace(
    contentFormat(...arguments, zhongjyuan.config.logger.levels.TRACE),
    format(prefixStyle, "#fadfa3""#030307"),
    format(timestampStyle, "#333333""#86A8E7"),
    format(contentStyle, "#ffffff""#B4C6E7"),
    format(stackStyle, "#000000""#86A8E7")
   );
  }
 }

 /**
  * debug日志
  * @author zhongjyuan
  * @date   2023年6月1日16:13:21
  * @email  zhongjyuan@outlook.com
  */

 function debug({
  if (isConsoleMethodSupported("debug")) {
   console.debug(
    contentFormat(...arguments, zhongjyuan.config.logger.levels.DEBUG),
    format(prefixStyle, "#fadfa3""#030307"),
    format(timestampStyle, "#333333""#00BCD4"),
    format(contentStyle, "#ffffff""#B2EBF2"),
    format(stackStyle, "#000000""#00BCD4")
   );
  }
 }

 /**
  * info日志
  * @author zhongjyuan
  * @date   2023年5月12日11:46:33
  * @email  zhongjyuan@outlook.com
  */

 function info({
  if (isConsoleMethodSupported("info")) {
   console.info(
    contentFormat(...arguments, zhongjyuan.config.logger.levels.LOG),
    format(prefixStyle, "#fadfa3""#030307"),
    format(timestampStyle, "#333333""#4CAF50"),
    format(contentStyle, "#ffffff""#C5E1A5"),
    format(stackStyle, "#000000""#4CAF50")
   );
  }
 }

 /**
  * warn日志
  * @author zhongjyuan
  * @date   2023年5月12日11:46:54
  * @email  zhongjyuan@outlook.com
  */

 function warn({
  if (isConsoleMethodSupported("warn")) {
   console.warn(
    contentFormat(...arguments, zhongjyuan.config.logger.levels.WARN),
    format(prefixStyle, "#fadfa3""#030307"),
    format(timestampStyle, "#333333""#FFD700"),
    format(contentStyle, "#ffffff""#F0E68C"),
    format(stackStyle, "#000000""#FFD700")
   );
  }
 }

 /**
  * error日志
  * @author zhongjyuan
  * @date   2023年5月12日11:47:13
  * @email  zhongjyuan@outlook.com
  */

 function error({
  if (isConsoleMethodSupported("error")) {
   console.error(
    contentFormat(...arguments, zhongjyuan.config.logger.levels.ERROR),
    format(prefixStyle, "#fadfa3""#030307"),
    format(timestampStyle, "#333333""#FF6347"),
    format(contentStyle, "#ffffff""#FFDAB9"),
    format(stackStyle, "#000000""#FF6347")
   );
  }
 }

 return {
  log: info,
  trace: trace,
  debug: debug,
  info: info,
  warn: warn,
  error: error,
 };
})();

实现效果

实际效果
实际效果

本文由 mdnice 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值