Просмотр исходного кода

优化日志系统,提供独立方法

zhusiqing 3 лет назад
Родитель
Сommit
2ed4cd70bd
3 измененных файлов с 97 добавлено и 31 удалено
  1. 2 1
      src/plugins/index.ts
  2. 93 28
      src/plugins/logger.ts
  3. 2 2
      src/plugins/redis.ts

+ 2 - 1
src/plugins/index.ts

@@ -39,11 +39,12 @@ const redisOption = {
   }
 };
 const localDbOption = localDbOpt;
+
 export default () => {
+  const logger = new MyLogger();
   const redis = new RedisPlugin(redisOption);
   const memoryCache = new MemoryCachePlugin();
   const localDb = new LocalDbPlugin(localDbOption);
-  const logger = new MyLogger();
   logger.middleware = logger.middleware.bind(logger);
   return {
     redis,

+ 93 - 28
src/plugins/logger.ts

@@ -71,8 +71,9 @@ req: ${JSON.stringify(Object.assign(client, newCommonInfo))}`;
 };
 
 // 日志级别
-const methods: string[] = ['trace', 'debug', 'info', 'warn', 'error', 'fatal', 'mark'];
-
+// const methods: string[] = ['trace', 'debug', 'info', 'warn', 'error', 'fatal', 'mark'];
+const methodsAcc: string[] = ['trace', 'debug', 'info', 'warn'];
+const methodsErr: string[] = ['error', 'fatal', 'mark'];
 // 默认配置
 const defaultConfig = {
   logLevel: 'debug', // 日志级别
@@ -80,6 +81,36 @@ const defaultConfig = {
   env: 'development' // 指定当前环境,当开发时控制台也输出
 };
 
+let logger: Logger = {} as Logger;
+let loggerErr: Logger = {} as Logger;
+
+export function formatLog(
+  type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
+  message: string ,
+): void
+export function formatLog(
+  type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
+  message: string ,
+  ctx?: Context,
+  options?: { [key: string]: string|number }): void
+export function formatLog(
+  type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
+  message: string ,
+  ctx?: Context,
+  options?: { [key: string]: string|number }): void {
+    let log: Logger;
+    if (methodsErr.includes(type)) {
+      log = loggerErr;
+    } else {
+      log = logger;
+    }
+    if (ctx) {
+      log[type](formatOutputHandle(ctx, message, Object.assign({ ip: ctx.ip }, options)));
+    } else {
+      log[type](message);
+    }
+}
+
 export default class MyLogger {
   // log配置
   logConfig = Object.assign({}, defaultConfig, config.logs);
@@ -91,6 +122,7 @@ export default class MyLogger {
   isDev = false
   // log4js实例
   logger: Logger = {} as Logger
+  loggerErr: Logger = {} as Logger
   constructor() {
     this.init();
   }
@@ -117,7 +149,20 @@ export default class MyLogger {
         // 按日期进行输出log
         type: 'dateFile',
         // 路径和文件名
-        filename: `${dir}/z`,
+        filename: `${dir}/access/z-acc`,
+        pattern: 'yyyy-MM-dd.log',
+        alwaysIncludePattern: true,
+        // 日志输出格式
+        layout: {
+          type: 'pattern',
+          pattern: '[%d{yyyy-MM-dd hh:mm:ss}] [%p] %c %m%n'
+        }
+      },
+      error: {
+        // 按日期进行输出log
+        type: 'dateFile',
+        // 路径和文件名
+        filename: `${dir}/error/z-err`,
         pattern: 'yyyy-MM-dd.log',
         alwaysIncludePattern: true,
         // 日志输出格式
@@ -160,7 +205,10 @@ export default class MyLogger {
       pm2InstanceVar: 'INSTANCE_ID'
     });
     // 初始化log4js
-    this.logger = log4js.getLogger('log');
+    logger = log4js.getLogger('log');
+    loggerErr = log4js.getLogger('error');
+    this.logger = logger;
+    this.loggerErr = loggerErr;
   }
   middleware(ctx: Context): InterfaceLog {
     const $log: InterfaceLog = {
@@ -172,34 +220,51 @@ export default class MyLogger {
       fatal: () => {},
       mark: () => {}
     };
-    methods.map(el => {
+    methodsAcc.map(el => {
       $log[el] = (message, options?: { [key: string]: string }) => {
         this.logger[el](formatOutputHandle(ctx, message, Object.assign({ ip: ctx.ip }, options)));
       };
     });
+    methodsErr.map(el => {
+      $log[el] = (message, options?: { [key: string]: string }) => {
+        this.loggerErr[el](formatOutputHandle(
+          ctx,
+          message,
+          Object.assign({ ip: ctx.ip },
+          options
+        )));
+      };
+    });
     return $log;
   }
-  formatLog(
-    this: MyLogger,
-    type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
-    message: string ,
-  ): void
-  formatLog(
-    this: MyLogger,
-    type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
-    message: string ,
-    ctx?: Context,
-    options?: { [key: string]: string|number }): void
-  formatLog(
-    this: MyLogger,
-    type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
-    message: string ,
-    ctx?: Context,
-    options?: { [key: string]: string|number }): void {
-    if (ctx) {
-      this.logger[type](formatOutputHandle(ctx, message, Object.assign({ ip: ctx.ip }, options)));
-    } else {
-      this.logger[type](message);
-    }
-  }
+  formatLog
+  // formatLog(
+  //   this: MyLogger,
+  //   type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
+  //   message: string ,
+  // ): void
+  // formatLog(
+  //   this: MyLogger,
+  //   type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
+  //   message: string ,
+  //   ctx?: Context,
+  //   options?: { [key: string]: string|number }): void
+  // formatLog(
+  //   this: MyLogger,
+  //   type: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'mark',
+  //   message: string ,
+  //   ctx?: Context,
+  //   options?: { [key: string]: string|number }): void {
+  //     let log: Logger;
+  //     if (methodsErr.includes(type)) {
+  //       log = loggerErr;
+  //     } else {
+  //       log = logger;
+  //     }
+  //     if (ctx) {
+  //       log[type](formatOutputHandle(ctx, message, Object.assign({ ip: ctx.ip }, options)));
+  //     } else {
+  //       log[type](message);
+  //     }
+  // }
 }

+ 2 - 2
src/plugins/redis.ts

@@ -1,8 +1,7 @@
 import redis, { ClientOpts, RedisClient } from 'redis';
 import util from 'util';
 import consola from 'consola';
-
-
+import { formatLog } from './logger';
 // node err回调改为promise工具库
 const promisify = util.promisify;
 class Redis {
@@ -20,6 +19,7 @@ class Redis {
     const client = redis.createClient(options);
     client.on('error', err => {
       consola.error(err);
+      formatLog('error', err);
     });
     client.on('ready', () => {
       consola.success('redis is ready');