Angular控制台仅记录开发环境

Bla*_*axy 17 angular

在我们的Angular应用程序(使用Angular CLI制作)中,我们使用了几个console语句.是否有全局方法来检测环境,然后console.log仅在开发中显示我们的组件和服务?

我的意思是全球方式 - 我知道我们可以使用类似的东西:

if (!environment.production) {
  console.log(this.reviewTasksList);
}
Run Code Online (Sandbox Code Playgroud)

但是每次我们必须使用这个代码console.log(以及必要的导入来获取environment变量),我们的代码将变得冗长.

我想知道是否有办法可能:

  • 以更快的方式访问环境
  • 也许在prod构建时删除所有控制台日志

或者更好的解决方案是创建一个记录器服务并在其中进行所有环境检查?

我不希望我的包大小受到调试语句和服务的影响.

Tar*_*ang 14

这将使用空白功能覆盖所有控制台日志.

if (environment.production) {
  enableProdMode();
  window.console.log = function () { };   // disable any console.log debugging statements in production mode
  // window.console.error = function () { };

}
Run Code Online (Sandbox Code Playgroud)

  • 用空函数覆盖console.log是否会影响性能? (2认同)

Ara*_*ind 8

或者,您可以使用通用服务来实现此目的

this.loggerService.log(this.reviewTasksList);
Run Code Online (Sandbox Code Playgroud)

在您的服务中,您可以使用

log(text: string){
     if (!environment.production) {
       console.log(text)
     }
}
Run Code Online (Sandbox Code Playgroud)


Gün*_*uer 7

您可以使用isDevMode()或您environment.production来检查代码是在开发模式还是生产模式下运行.

我认为记录器服务是个好主意,然后根据模式在提供者中注册不同的记录器服务.

另见https://github.com/angular/angular/pull/14308