我最近在我的项目中加入了ngx-logger
,用于在应用程序中实现记录器级别。我已经在app.module.ts
的配置中对ngx-logger
中的记录程序级别进行了硬编码,但是我需要在一些全局配置文件中实现它。
我遵循了教程here,该教程告诉我在配置中对级别进行硬编码。这种方法的问题在于,除了已经说明的配置之外,如果除了我编写的代码之外还定义了其他environment
,它将产生错误。我想删除此硬编码配置,而是使用一些“ config”文件来管理环境变量。但是我不确定该怎么做,也找不到在线资源。
这是我的配置:
imports: [
BrowserModule,
BrowserAnimationsModule,
ToastrModule.forRoot(),
MDBBootstrapModule.forRoot(),
AppAsideModule,
AppBreadcrumbModule.forRoot(),
AppFooterModule,
AppHeaderModule,
AppSidebarModule,
PerfectScrollbarModule,
FormsModule,
ReactiveFormsModule,
HttpClientModule,
AppRoutingModule,
// Logger config based on environment
LoggerModule.forRoot({
level: !environment.production ? NgxLoggerLevel.LOG : NgxLoggerLevel.OFF,
// serverLogLevel
serverLogLevel: NgxLoggerLevel.OFF
})
]
environment.ts:
export const environment = {
production: false,
isDebugMode: true,
lang: 'en',
api: {
grant_type: 'password',
clientId: 'sugar',
clientSecret: '',
host: "https://blablabla.com:44375/rest/v11_1/",
platform: 'custom_api',
},
};
tsconfig.json:
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
]
}
}
我的目标:找到更好的记录器级别实施,而不是硬编码
答案 0 :(得分:1)
您可以为所有文件设置另一个变量isdebug。
用于生产 —————— isdebug = 1
用于调试 —————— isdebug = 2
模拟 —————— isdebug = 3
您的编码。 (environment.isdebug === 1 || environment.isdebug === 2)? NgxLoggerLevel.LOG :: NgxLoggerLevel.OFF
如果您想即时更改,请使用env.js进行配置,以下解决方案很好
答案 1 :(得分:0)
这是我几天前面对相同任务的解决方案:
在app-module.ts中:
import { LoggerModule, NgxLoggerLevel, NGXLogger, LoggerConfig } from 'ngx-logger';
//...
@NgModule({
declarations: [
// ...
],
imports: [
LoggerModule,
// ...
],
providers: [
{
provide: LoggerConfig, useFactory: () => Utility.loadJson<LoggerConfig>('/assets/loggerConfig.json', //
{ // defaults, in case file is not found:
level: NgxLoggerLevel.WARN,
// serverLoggingUrl: '/api/logs',
// serverLogLevel: NgxLoggerLevel.OFF,
// disableConsoleLogging" : true
})
},
NGXLogger,
//...
]
然后准备好实用方法:
export class Utility {
static loadJson<T>(file: string, defaultObject: T, onError = (event) => null ): T {
const request = new XMLHttpRequest();
request.open('GET', file, false);
request.onerror = onError;
if (request.overrideMimeType) {
request.overrideMimeType('application/json');
}
request.send();
if (request.status === 200) {
return <T>JSON.parse(request.responseText);
}
return defaultObject;
}
// ...
然后在src / assets中创建loggerConfig.json文件:
{
"// levels:": "TRACE=0, DEBUG=1, INFO=2, LOG=3, WARN=4, ERROR=5, FATAL=6, OFF=7",
"level": 1,
"// serverLogLevel" : 5,
"// serverLoggingUrl": "/api/logs",
"// disableConsoleLogging" : true
}
现在,将loggerConfig.json
添加到您的gitignore
文件中并进行更改:您不希望开发人员覆盖彼此的设置。
想法是,通常使用提供的默认值,但是您可以在配置文件中拥有自己的替代项。