javascript - console.log 仅在开发模式 Angular 2

标签 javascript angular console

我在 Angular 2 应用程序 中有 console.log 消息。我想在 dev 中有 console.log 而不是在 production 中所以我创建了 Logger service 如下:

logger.service.ts

import { Injectable } from '@angular/core';
import { environment } from '../../../environments/environment';

@Injectable()
export class LoggerService {
  log(msg): void {
    if (!environment.production) {
      console.log(msg);
    }
  }
  error(msg): void {
    console.error(msg);
  }
  warn(msg, options): void {
    if (!environment.production) {
      if (options) console.warn(msg, options);
      else console.warn(msg);
    }
  }
} 

app.component.ts

import { Component, NgModule, OnInit } from '@angular/core';
import { environment } from '../environments/environment';   
import { LoggerService } from './shared/services/logger.service';

@Component({
  selector: 'web-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {    
  constructor(private _logger: LoggerService) {
    _logger.log("This is my test logger !!");
  }   

}

我对这种方法有疑问:

  • Dev 中,所有消息都从 logger.service.ts 文件中记录下来,这是正确的,但它使得调试很难找到实际的记录位置(文件,行号)。 [在我的例子中,我有 logger.service.ts 文件,但在 console 中它显示另一个文件名]

    enter image description here

请问有什么建议吗?

最佳答案

这种方法只是增加了一个额外的控制台对象延迟层,你需要在每个组件中注入(inject)记录器服务并使调试更加困难,但你可以通过更改日志,错误,温暖属性和卡住对象,使其变得不可更改

考虑一下

main.ts

if (environment.production) {
  enableProdMode();

  let disFunc = () => 'console has been disabled in production mode';

  console.log = disFunc
  console.error = disFunc
  console.warn = disFunc

  Object.freeze(console);

}

这样你就可以正常使用控制台对象了。

关于javascript - console.log 仅在开发模式 Angular 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52146175/

相关文章:

css - 在 TS 文件上动态应用 CSS 类

angular - 事件发射器工作一次但不是第二次 Angular 8

c# 将 console.writeline 转换为字符串

javascript - 使用 Puppeteer 从 iframe 中的 <p> 标记中提取文本

javascript - 打印出重复的数字

angular - 将组件放在 declarations 数组和 entryComponents 数组中

vbscript - VBS - 如何暂停脚本直到按下某个键?

javascript - jspContainer 内缺少 div jspVerticalBar

javascript - 原始对象到包装器对象的转换(幕后)

javascript - 浅紫色在 Chrome 的控制台中意味着什么?