Log.ets 6.71 KB
import hilog from '@ohos.hilog';
import { process } from '@kit.ArkTS';

export interface LogImp {

  logV(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number, log: string): void;

  logI(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number, log: string): void;

  logD(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number, log: string): void;

  logW(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number, log: string): void;

  logE(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number, log: string): void;

  logF(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number, log: string): void;

  appenderClose(): void;

  getLogLevel(logInstancePtr: number): number;

  setAppenderMode(logInstancePtr: number, mode: number): void;

  openLogInstance(level: number, mode: number, cacheDir: string, logDir: string, nameprefix: string,
    cacheDays: number): number;

  getXlogInstance(nameprefix: string): number;

  releaseXlogInstance(nameprefix: string): void;

  appenderOpen(level: number, mode: number, cacheDir: string, logDir: string, nameprefix: string,
    cacheDays: number): void;

  appenderFlush(logInstancePtr: number, isSync: boolean): void;

  setConsoleLogOpen(logInstancePtr: number, isOpen: boolean): void;

  setMaxFileSize(logInstancePtr: number, aliveSeconds: number): void;

  setMaxAliveTime(logInstancePtr: number, aliveSeconds: number): void;

}

export class LogLevel {
  static LEVEL_VERBOSE: number = 0;
  static LEVEL_DEBUG: number = 1;
  static LEVEL_INFO: number = 2;
  static LEVEL_WARNING: number = 3;
  static LEVEL_ERROR: number = 4;
  static LEVEL_FATAL: number = 5;
  static LEVEL_NONE: number = 6;
}

class DebugLogImp implements LogImp {
  logV(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number, log: string): void {
    if (Log.level <= LogLevel.LEVEL_VERBOSE) {
      hilog.info(0x0000, tag, log);
    }
  }

  logI(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number,
    log: string): void {
    if (Log.level <= LogLevel.LEVEL_INFO) {
      hilog.info(0x0000, tag, log);
    }
  }

  logD(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number,
    log: string): void {
    if (Log.level <= LogLevel.LEVEL_DEBUG) {
      hilog.debug(0x0000, tag, log);
    }
  }

  logW(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number,
    log: string): void {
    if (Log.level <= LogLevel.LEVEL_WARNING) {
      hilog.warn(0x0000, tag, log);
    }
  }

  logE(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number,
    log: string): void {
    if (Log.level <= LogLevel.LEVEL_ERROR) {
      hilog.error(0x0000, tag, log);
    }
  }

  logF(logInstancePtr: number, tag: string, filename: string, funcname: string, line: number, pid: number, tid: number,
    maintid: number, log: string): void {
    if (Log.level <= LogLevel.LEVEL_FATAL) {
      hilog.fatal(0x0000, tag, log);
    }
  }

  getLogLevel(logInstancePtr: number): number {
    return Log.level;
  }

  appenderClose(): void {

  }

  setAppenderMode(mode: number): void {

  }

  appenderOpen(level: number, mode: number, cacheDir: string, logDir: string, nameprefix: string,
    cacheDays: number): void {

  }

  appenderFlush(logInstancePtr: number, isSync: boolean): void {

  }

  setConsoleLogOpen(logInstancePtr: number, isOpen: boolean): void {

  }

  setMaxFileSize(logInstancePtr: number, aliveSeconds: number): void {

  }

  setMaxAliveTime(logInstancePtr: number, aliveSeconds: number): void {

  }

  openLogInstance(level: number, mode: number, cacheDir: string, logDir: string, nameprefix: string,
    cacheDays: number): number {
    return 0;
  }

  getXlogInstance(nameprefix: string): number {
    return 0;
  }

  releaseXlogInstance(nameprefix: string): void {

  }
}

export class Log {
  // defaults to LEVEL_NONE
  static level: number = LogLevel.LEVEL_NONE;
  private static logImp: LogImp = new DebugLogImp();

  public static setLogImp(imp: LogImp): void {
    Log.logImp = imp;
  }

  public static getImpl(): LogImp {
    return Log.logImp;
  }

  public static setLevel(level: number): void {
    Log.level = level;
  }

  public static appenderClose(): void {
    if (Log.logImp != null) {
      Log.logImp.appenderClose();
    }
  }

  public static appenderFlush(isSync: boolean): void {
    if (Log.logImp != null) {
      Log.logImp.appenderFlush(0, isSync);
    }
  }

  public static getLogLevel(): number {
    if (Log.logImp != null) {
      return Log.logImp.getLogLevel(0);
    }
    return LogLevel.LEVEL_NONE;
  }

  public static setConsoleLogOpen(isOpen: boolean) {
    if (Log.logImp != null) {
      Log.logImp.setConsoleLogOpen(0, isOpen);
    }
  }

  public static v(tag: string, msg: string): void {
    if (Log.logImp != null && Log.logImp.getLogLevel(0) <= LogLevel.LEVEL_VERBOSE) {
      Log.logImp.logV(0, tag, "", "", 0, process.pid, process.tid, process.tid, msg);
    }
  }

  public static i(tag: string, msg: string): void {
    if (Log.logImp != null && Log.logImp.getLogLevel(0) <= LogLevel.LEVEL_INFO) {
      Log.logImp.logI(0, tag, "", "", 0, process.pid, process.tid, process.tid, msg);
    }
  }

  public static d(tag: string, msg: string): void {
    if (Log.logImp != null && Log.logImp.getLogLevel(0) <= LogLevel.LEVEL_DEBUG) {
      Log.logImp.logD(0, tag, "", "", 0, process.pid, process.tid, process.tid, msg);
    }
  }

  public static w(tag: string, msg: string): void {
    if (Log.logImp != null && Log.logImp.getLogLevel(0) <= LogLevel.LEVEL_WARNING) {
      Log.logImp.logW(0, tag, "", "", 0, process.pid, process.tid, process.tid, msg);
    }
  }

  public static e(tag: string, msg: string): void {
    if (Log.logImp != null && Log.logImp.getLogLevel(0) <= LogLevel.LEVEL_ERROR) {
      Log.logImp.logE(0, tag, "", "", 0, process.pid, process.tid, process.tid, msg);
    }
  }

  public static f(tag: string, msg: string): void {
    if (Log.logImp != null && Log.logImp.getLogLevel(0) <= LogLevel.LEVEL_FATAL) {
      Log.logImp.logF(0, tag, "", "", 0, process.pid, process.tid, process.tid, msg);
    }
  }
}