日志对象
日志对象是一个用于在控制台输出不同级别的日志信息的工具。它提供了一系列的方法,包括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 < 1) return ""; 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多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。