精华内容
下载资源
问答
  • JavaScript console.log %c %o %s %d %f

    千次阅读 2020-12-26 18:57:57
    (其实JS中的console.log()可以依次传入不定数量个参数,完成输出) JavaScript 输出函数的占位符 以下占位符和其他语言不完全相同: %s 字符串(整数、小数也可以打印) %d 整数 %f 小数 %o 对象 %c 后面字符串的样式 ...

    Intro

    • 字符串拼接/占位符替换
      几乎所有语言都有输出函数,当需要快速拼接多个参数 然后输出的时候,有各自的printf函数和%xxx占位符作为解决方案:

      • C
        printf("age is %d\n", 23); // age is 23
      • Java
        System.out.printf("hello %s\n", "world"); // hello world
        String.format("hello %s\n", "world");
      • Python
        print("hello %s %s"%("world", 123)) # hello world 123 注意%和参数列表的小括号

    JavaScript中的输出函数console.log也有这样的功能。
    (其实JS中的console.log()本来就可以依次传入不定数量个参数,完成输出)

    JavaScript 输出函数的占位符

    以下占位符和其他语言不完全相同:

    %s 字符串(整数、小数也可以打印)
    %d 整数
    %f 小数
    
    %o 对象
    
    %c 后面字符串的样式
    

    以上列表可能不全,只是我暂时接触过的,后面遇到新的会补充,也欢迎大家在评论区告诉我新的。感谢。

    用法见下。

    • demo
    console.log("s测试: %s-%s-%s-%s", "wuyujin", 1997, 123.456, {name:"aaa",age:22});
    
    console.log("d和f测试: %d-%f", 1997, 123.456);
    
    var obj = {name:"aaa", age:22, contact: {qq:123,wechat:"asd",tel:123456}};
    console.log("o测试: %o %O", obj, obj);
    
    var str = "%c hello %c world";
    var arg1 = "color: #fadfa3; background: #030307; padding:5px 0;";
    var arg2 = "background: pink; padding:5px 0;";
    console.log(str, arg1, arg2);
    

    运行结果:
    在这里插入图片描述

    应用

    之前讲 console.log 本身就可以一次性传入不定数量个参数,进行打印,那么%xxx之类的占位符还有存在的必要吗?
    有的,如下:

    var name = "wuyujin";
    var birth = 1997;
    var score = 123.456;
    var info = {addr:"SH", age:23, concact: {tel:123,qq:456,wechat:"id123"}};
    

    对以上信息拼接打印,有两种方式:

    console.log("我的名字:", name, ",生于:", birth, ",成绩:", score, ",其他信息", info);
    console.log("我的名字:%s,生于:%d,成绩:%f,其他信息:%o", name, birth, score, info);
    

    第二种更清晰(仅个人感觉,人与人观念可不同)。

    如图:
    在这里插入图片描述

    展开全文
  • nest笔记二:使用log4js替换nest默认日志 个人比较喜欢log4js,nest自带的日志,时间格式又不是我想要的,所以我这里实现一个替换nest日志的日志 基本上要求 时间格式为: YYYY-MM-DD hh:mm:ss.ddd 可以明确知道...

    nest笔记二:使用log4js替换nest默认日志

    • 个人比较喜欢log4js,nest自带的日志,时间格式又不是我想要的,所以我这里实现一个替换nest日志的日志

    基本上要求

    • 时间格式为: YYYY-MM-DD hh:mm:ss.ddd
    • 可以明确知道输出日志的是哪一个源文件
    • 日志文件支持数量配置,大小配置
    • 日志文件支持自动压缩
    • 有专门的普通的日志文件和错误日志文件以及彩色的控制台输出。
      基于上述几点,我这里选择了log4js

    配置说明

    log4js配置说明

    • 具体如下,我这里是放工程的config/log4js.js文件里面,使用js可以支持注释,比较方便
    // config/log4js.js
    /**
     * 这个是log4js文件配置,具体参数log4js官网
     */
    module.exports = exports = {
        appenders: {
            log: {
                type       : 'file',             // 如果需要区分日期的,这个值可以改为datefile
                filename   : './logs/log.log',
                maxLogSize : 1024 * 1024 * 50,   // 日志文件的大小,我这里配置的是50M
                encoding   : 'utf-8',
                backups    : 100,
                compress   : true,      // 如果需要压缩,这个值改为true,是的话,这里会得到.gz格式的日志
                keepFileExt: true,      // 是否保持文件扩展名,不是的话,会成.1,.2,.3这样的日志文件
                layout     : {
                    type: 'messagePassThrough'  //是直接跳过头部生成,我这里已经有自定义的头部生成, 所以就不需要这个了
                }
            },
            err: {
                type       : 'file',
                filename   : './logs/err.log',
                maxLogSize : 1024 * 1024 * 50,
                encoding   : 'utf-8',
                backups    : 100,
                compress   : true,
                keepFileExt: true,
                layout     : {
                    type: 'messagePassThrough'
                }
            },
            console: {
                type: 'stdout',  // 使用标准输出,会比console的性能高
                layout: { type: "messagePassThrough"}
            }
        },
        categories: {
            default: { appenders: ['log'], level: 'ALL' },
            error  : { appenders: ['err'], level: 'ALL' },
            console: { appenders: ['console'], level: 'ALL' }
        }
    }
    

    日志类实现

    • 我这里文件名是./src/log/log4js.ts
    
    import * as path from 'path';
    import * as log4js from 'log4js';
    import * as util from 'util';
    import {GetLogManager, ILog, datetimeUtils} from 'xmcommon';
    // xmcommon是我的一个开源node的代码库,欢迎大家使用 npm install xmcommon
    // 在我的所有项目中,都使用了这个库, 目前还算比较稳定
    
    /** 普通日志文件输出 */
    let normalLog : log4js.Logger;
    /** 错误日志文件输出 */
    let errorLog  : log4js.Logger;
    let consoleLog: log4js.Logger;
    /** 日志级别枚举 */
    export enum EnumLogLevel {
        TRACE = 'TRACE',
        DEBUG = 'DEBUG',
        LOG   = '  LOG',
        INFO  = ' INFO',
        ERROR = 'ERROR',
        WARN  = ' WARN',
    }
    /** 颜色样式 */
    const styles = {
        // styles
        bold: [1, 22],
        italic: [3, 23],
        underline: [4, 24],
        inverse: [7, 27],
        // grayscale
        white: [37, 39],
        grey: [90, 39],
        black: [90, 39],
        // colors
        blue: [34, 39],
        cyan: [36, 39],
        green: [32, 39],
        magenta: [35, 39],
        red: [91, 39],
        yellow: [33, 39]
    };
    
    /**
     * 给日志的head上色
     * @param msg 日志消息
     * @param paramColorStyle 日志颜色
     * @return 上色后的日志
     */
    function colored(msg: {head: string, info: string}, paramColorStyle?: number[]): string {
        if(paramColorStyle) {
            return `\x1B[${paramColorStyle[0]}m${msg.head}\x1B[${paramColorStyle[1]}m ${msg.info}`;
        } else {
            return `${msg.head} ${msg.info}`;
        }
    }
    
    /**
     * 生成日志
     * @param categoryName 类名名称
     * @param level 日志级别
     * @param data 日志参数内容
     * @return
     */
    function buildLog(categoryName: string, level: string, ...data: any[]) {
        return {head:`[${datetimeUtils.nowDateString()} ${level}][${categoryName}]`, info: util.format(...data)};
    }
    
    
    
    /**
     * 基于Log4js实际日志
     */
    class XLogFor4js implements ILog{
        private m_name: string;
        public constructor(paramName: string) {
            this.m_name = paramName;
        }
    
        public get name() {
            return this.m_name;
        }
    
        public trace(...paramLog: any[]): void {
            const logInfo = buildLog(this.name, EnumLogLevel.TRACE, ...paramLog)
            normalLog.trace(colored(logInfo));
            consoleLog.trace(colored(logInfo, styles.blue));
        }
        public debug(...paramLog: any[]): void {
            const logInfo = buildLog(this.name, EnumLogLevel.DEBUG, ...paramLog)
            normalLog.debug(colored(logInfo));
            consoleLog.debug(colored(logInfo, styles.cyan));
        }
        public log(...paramLog: any[]): void {
            const logInfo = buildLog(this.name, EnumLogLevel.LOG, ...paramLog)
    
            normalLog.info(colored(logInfo));
            consoleLog.info(colored(logInfo, styles.magenta));
        }
        public info(...paramLog: any[]): void {
            const logInfo = buildLog(this.name, EnumLogLevel.INFO, ...paramLog)
    
            normalLog.info(colored(logInfo));
            consoleLog.info(colored(logInfo, styles.green));
        }
        public error(...paramLog: any[]): void {
            const logInfo = buildLog(this.name, EnumLogLevel.ERROR, ...paramLog);
            const logMsg  = colored(logInfo);
    
            normalLog.error(logMsg);
            errorLog.error(logMsg)
    
            consoleLog.error(colored(logInfo, styles.red));
        }
    
        public warn(...paramLog: any[]): void {
            const logInfo = buildLog(this.name, EnumLogLevel.WARN, ...paramLog)
            const logMsg  = colored(logInfo);
    
            normalLog.warn(logMsg);
            errorLog.warn(logMsg)
            consoleLog.warn(colored(logInfo, styles.yellow));
        }
    }
    /**
     * 初始化日志
     * @param paramConfigName 配置文件名(js文件)
     */
    function InitLog(paramConfigName: string) {
        const cfg = require(paramConfigName);
        log4js.configure(cfg);
    
        normalLog  = log4js.getLogger('default');
        errorLog   = log4js.getLogger('error');
        consoleLog = log4js.getLogger('console');
    
        // 这个是绑定xmcommon的getLogger方法
        const LogManager = GetLogManager();
        LogManager.setCreateLog((paramTag:string) => new XLogFor4js(paramTag));
        LogManager.setDefaultLog(new XLogFor4js('default'));
    
        // 默认控制台输出函数
        const conLog = LogManager.getLogger('console');
    
        // 绑定控制台的日志函数
        console.log   = conLog.info.bind(conLog);
        console.error = conLog.error.bind(conLog);
        console.debug = conLog.debug.bind(conLog);
        console.warn  = conLog.warn.bind(conLog);
        console.trace = conLog.trace.bind(conLog);
    }
    
    /** 生成绝对配置文件路径 */
    const configFile = path.join(process.cwd(), 'config', 'log4js.js');
    /* 执行初始化 */
    InitLog(configFile);
    

    替换nest的默认日志

    • 在nest工程的启动文件src/main.ts,加入这个
    • 在创建nest application的地方,指定日志文件

    替换nest日志的类

    • 文件是src/nest.logger.ts
    import { LoggerService } from '@nestjs/common';
    import { getLogger } from 'xmcommon';
    
    const log = getLogger('nest');
    export class NestLogger implements LoggerService {
        log(...msg: any[]) {
            log.info(...msg);
        }
        error(...msg:any[]) {
            log.error(...msg);
        }
        warn(...msg:any[]) {
            log.warn(...msg);
        }
        debug(...msg:any[]) {
            log.debug(...msg);
        }
        verbose(...msg:any[]) {
            log.trace(...msg);
        }
    }
    
    

    在启动地方替换

    // main.ts
    import './log/log4js';
    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';
    import { getLogger } from 'xmcommon';
    import { NestLogger } from './nest.logger';
    const log = getLogger(__filename);  // 这样构造日志,就可以在输出的地方,打印出对应的文件
    log.info('程序开始启动...');
    async function bootstrap() {
        const app = await NestFactory.create(AppModule,
        {
            logger: new NestLogger() // 这里指定了新的nest日志
        });
        await app.listen(3000);
        log.info('开始侦听:3000...')
    }
    bootstrap();
    
    • 到这里,就实现了对日志文件的全替换。输出效果如下:
      在这里插入图片描述

    相关文章列表

    展开全文
  • console.log()是JavaScript中的一个内置函数,用于在控制台输出信息;该方法对于开发过程进行测试很有帮助。可以输出之前在其中定义的任何类型的变量,或者只输出需要显示给用户的任何消息。语法console.log(message...

    console.log()是JavaScript中的一个内置函数,用于在控制台输出信息;该方法对于开发过程进行测试很有帮助。可以输出之前在其中定义的任何类型的变量,或者只输出需要显示给用户的任何消息。

    157eea66ea79

    语法console.log(message);

    参数:它接受一个参数,该参数可以是数组,对象或任何消息。

    返回值:返回给定参数的值。

    下面通过示例来看看console.log()方法的使用

    示例1:传递数字作为参数给

    如果数字传递给函数console.log(),那么该方法将显示它。

    var a = 2;

    console.log(a);

    输出:

    157eea66ea79

    示例2:传递字符串作为参数

    如果将字符串作为参数传递给函数console.log(),则该方法将显示它。

    var str = "Hello World!";

    console.log(str);

    输出:

    157eea66ea79

    示例3:传递字符char作为参数

    如果将字符char传递给函数console.log(),则该方法将显示它。

    var ch = '2';

    console.log(ch);

    输出:

    157eea66ea79

    示例4:传递文本消息作为参数

    如果消息传递给函数console.log(),则该方法将显示给定的消息。

    console.log("Hello World!");

    输出:

    157eea66ea79

    示例5:传递函数作为参数

    如果函数被传递给函数console.log(),那么该方法将显示传递的function()的值。

    function func() { return (5 * 19); }

    console.log(func());

    输出:

    157eea66ea79

    示例6:

    可以将数字、字符串、函数和文本消息混合作为参数

    var a = 2;

    console.log("参数a的值为:" + a);

    var str = "Hello";

    console.log("参数str的值为:" + str);

    输出:

    157eea66ea79

    更多前端开发知识,请查阅 HTML中文网 !!

    展开全文
  • log4js log4js安装 npm install log4js 日志文件配置: 新建log4js.js文件,对日志输出的情况进行配置 // 日志配置文件 import path from "path"; import log4js from "log4js"; // log4js默认的日志级别如下:ALL &...

    log4js

    log4js安装

    npm install log4js

    日志文件配置: 新建log4js.js文件,对日志输出的情况进行配置

    // 日志配置文件
    import path from "path";
    import log4js from "log4js";
    
    // log4js默认的日志级别如下:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF
    
    const __dirname = path.resolve("./");
    log4js.configure({
      appenders: {
        // 配置打印输出源
        trace: {
          type: "console", // 控制台打印日志
          // type: "file", // 表示日志输出为普通文件,在此种配置下日志会输出到目标文件夹的目标文件中,并会随着文件大小的变化自动份文件
          // type: "dateFile", // 表示是输出按时间分文件的日志,在此种配置下,日志会输出到目标目录下,并以时间格式命名,随着时间的推移,以时间格式命名的文件如果尚未存在,则自动创建新的文件.
          // compress: true, //(默认为false) - 在滚动期间压缩备份文件(备份文件将具有.gz扩展名)
          // maxLogSize: 10000000, // 文件最大存储空间,单位是字节,只在type: file模式有效,表示文件多大时才会创建下一个文件( xxx.log .1 之类)
          filename: path.join(__dirname, "/logger/logs", "trace", "trace"), // 写入日志文件的路径
          pattern: "yyyy-MM-dd.log", //确定何时滚动日志的模式,只在type: dateFile模式有效,(默认为.yyyy-MM-dd0),表示一个文件的时间命名模式,格式:.yyyy-MM-dd-hh:mm:ss.log,在生成文件中会依照pattern配置来在filename的文件结尾追加一个时间串来命名文件。
          encoding: "utf-8", // default "utf-8",文件的编码
          alwaysIncludePattern: true, //将模式包含在当前日志文件的名称以及备份中,只在type: dateFile模式有效,(默认为false),配置为ture即最终的日志路径文件名为filename + pattern
          //backups: 只在type: file模式有效,表示备份的文件数量,如果文件过多则会将最旧的删除。
        },
        file: {
          type: "file",
          filename: path.join(__dirname, "/logger/logs", 'log'),
          pattern: "yyyy-MM-dd.log",
          encoding: "utf-8",
          alwaysIncludePattern: true,
        },
        console: {
          type: "console",
        }
      },
      categories: {
        default: { appenders: ["console"], level: "trace" },
        cheese: { appenders: ["console", "file"], level: "warn" },
      }
    });
    
    export const logger = log4js.getLogger();
    export const loggerCheese = log4js.getLogger('cheese');
    

    日志调用

    import { logger,loggerCheese } from '../logger/log4js.js';
    
    // logger.all('all') 不直接使用
    logger.trace("trace");
    logger.debug('debug');
    logger.info('info')
    logger.info('info');
    logger.warn('warn');
    logger.error('error');
    logger.fatal('fatal');
    // logger.off('off'); 不直接使用
    console.log('------------------------分割线-----------------------');
    
    
    loggerCheese.trace("trace");
    loggerCheese.debug('debug');
    loggerCheese.info('info')
    loggerCheese.info('info');
    loggerCheese.warn('warn');
    loggerCheese.error('error');
    loggerCheese.fatal('fatal');
    
    展开全文
  • 下面介绍log4js在vue项目中的部署与使用。 二.解决方案 1.安装log4j // 注意:如果只执行npm install XXX,没有指定安装到那种环境下的“后缀”,就会发现node-modules中安装了,但是package.json中没有的情况。 ...
  • log4js是一款用于node开发的日志记录库,其使用范围相当之广,在Express,Koa系列,Hapi等框架时,相信很多人都用过该库。其由于自身的高自由度,高可扩展性深受广大Node开发者所喜欢。 在实际开发过程中,每个人会...
  • 使用node.jslog4js前要先安装log4js模块。输入如下命令:npminstalllog4js安装完毕后,新建log4j.js文件,在文件中添加如下内容:varlog4js=require('log4js');functiongetLogger(name){varlogger=log4js.getLogger...
  • 结论:用逗号连接,就不会出现[object object]的问题。
  • console.log()是JavaScript中的一个内置函数,用于在控制台输出信息;该方法对于开发过程进行测试很有帮助。可以输出之前在其中定义的任何类型的变量,或者只输出需要显示给用户的任何消息。语法console.log(message...
  • 针对这个问题,这篇文章就说一说js中的别一种调试方法 console.log()console.log()定义console.log():可以将变量输出到浏览器的控制台中,方便开发者调用JS代码,它是一个使用频率很高的功能。提示:浏览器中...
  • log4js动态配置

    2021-07-13 15:47:41
    log4js 动态配置 在开发中总是会碰到需要配置各种各样类型的日志文件。要是能够实现动态配置功能而不用去更新调整log4js的配置文件就方便太多了。大部分应用的log4js 的配置文件格式都是大同一样的。所以本着这个...
  • 了解 Node.js 日志记录器并开始使用两个最受欢迎的 Node 日志包 运行服务器端应用程序时,会发生很多事件,其中大多数事件都会写入日志文件中。日志文件可能是磁盘上文件的集合,也可能是数据库中的一系列记录。...
  • 在用循环中用push添加数组元素时发现每次打印出来的都是最后的数组 var i =[]; for(let j=0;j<5;j++) ...因为alter是会阻断代码继续往下执行的,所以后面我用alter替换了console.log,发现确
  • Electron log4js 配置

    2021-06-23 09:26:42
    桌面应用开发中需要借助日志帮助我们去分析一些异常情况,log4js是很好的日志库 安装 cnpm install log4js --save 配置 import log4js from 'log4js' import path from 'path' import { app } from '...
  • log4js

    2021-01-30 20:31:12
    const log4js = require('log4js') // 调用 .getLogger() 可获得log4js的实例 const logger = log4js.getLogger() // 设置日志等级 logger.level = 'error' // 根据日志等级,输出日志 logger.error('错误日志') ...
  • log4js 实现不同级别的日志输出至不同文件
  • 以前在node的版本用log4js是有replaceConsole配置项后,但是我最近给nestjs配置时候,发现他没有了。 找到官网:说是引起了一些奇怪的错误,还破坏了核心。 如果实在要替换了,也是有有办法的,就是手动绑定 { ...
  • JS禁止console.log()输出

    2021-05-27 12:27:14
    写在入口文件即可 console.log=function(){}
  • JavaScript|调试 console.log() debugger 很多浏览器都内置了调试工具,内置的调试工具可以开始或者关闭,严重的错误信息会发送给用户,我们可以设置断点,可以在代码执行时检测变量。 1.console.log()方法 可以使用...
  • log4js的使用

    2021-10-20 11:12:48
    log4js用于日志输出。源码见码云log4js-node 主要概念 category:日志事件分组 appender:将“日志事件”输出 layout:配置appender输出的结构 代码示例 //使用默认的layout样式 const log4js = require('log4js')...
  • nodejs日志管理 log4js

    千次阅读 2021-05-17 10:43:39
    一、首先是在项目中安装 log4js npm install log4js --save 二、权值从小到大 log4js日志级别 all < trace < debug < info < warn < error < fatal < mark < off 二、基本使用: 在...
  • 服务端需要配置日志记录,由此来减少问题排查的成本 ...import log4js from 'log4js'; const config = { appenders: { debug: { type: 'console' }, info: { type: 'dateFile', filename: 'logs/info
  • In Python:print [1,2], '\n', [3,4]would print[1,2][3,4]In Javascript:console.log([1,2],'\n',[3,4])prints[1,2] '\n' [3,4]What is the equivalent Javascript statement to the above Python print?...
  • NodeJS 后端开发 08 使用log4js打日志

    千次阅读 多人点赞 2021-06-14 09:33:06
    NodeJS 后端开发 08 使用log4js打日志 日志是什么? 像记日记一样,日志是通过程序打印出来的,记录程序内部何时何处发生了什么事件。 本文只为使用学习为主,想对日志管理和分析有更深认识的可以看 => 日志原理...
  • 但是有个啥问题,如果你直接hook,然后判断变量决定是否输出,你会发现一个问题,就是console.log对应的行号都是你hook函数那,而不是你写console.log的地方,这就很蛋疼了。。其实呢换个思路就行,小程序为例子。你...
  • 一、document.write() document.write()一个最基本的JavaScript命令是document.write。这个命令简单地打印指定的文本内容到页面上。为了逐字打印文本,在打印的文本字符串加上单引号。
  • 我之前在调试代码的时候,跟砸js代码执行情况,一般都是通过在代码块中使用alert的方式查看js代码的执行情况,今天也是看到有朋友使用console.log函数打印输出函数,变量,对象,下边就console.log的使用情况进行记录,具体...
  • 参考 链接: https://github.com/yushuohuanxiu/log4js-json-layout2. 优点 只在 log object 对象时,将 object 对象转为 json 格式...const log4js = require('log4js'); require('log4js-json-layout2'); const lo
  • JS 中,除了使用 alert() 调试代码外,我们还常常使用 console 对象的 log() 对 JS 程序进行调试,console.log() 方法的作用是在浏览器的控制台中输出指定的参数值。需要注意的是,在一些较低版本的浏览器,比如 ...
  • console.log原本是 Firefox 的“专利”,是安装 Firebugs 之后的 Firefox 所独有的调试方法。之后,IE8也增加了此功能,不过用起来比 Firebugs 麻烦,只有在开启调试窗口(F12)的时候,console.log才能出结果,不然就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,483,244
精华内容 593,297
关键字:

jslog