NC日志配置及使用方法


1.SysConfig配置

{HOME}/bin/sysConfig.bat

引入配置文件

{HOME}/ierp/bin/logger-config.properties

讀取配置並對日志模塊進行增刪改

各配置項說明

  1. 模塊:用於標識日志模塊的名稱,可根據需要自行增加
  2. 包前綴:暫未使用
  3. 級別:控制日志輸出級別(下列級別由低到高),可根據實際情況選擇級別以便控制日志輸出。
    • ALL
    • DEBUG
    • INFO
    • WARN
    • ERROR
    • NSTAC
    • OFF
  4. 輸出:設置日志輸出文件的位置(一般設置在Home的nclog文件夾下)
  5. 格式: 控制日志輸出的格式
    • %p: 日志級別
    • %X{serial}:訪問ID
    • %t: 線程標識
    • %X{remoteAddr}: 訪問地址
    • %X{user}: 訪問人
    • %d{yyyy-MM-dd HH:mm:ss}: 日志輸出時間
    • %m: 日志輸出信息
    • %n: 換行
  6. 滾動策略: 控制日志文件的拆分規則,何種條件下生成新文件,備份或刪除舊文件
    • 時間策略
      • 每年:按年生成文件
      • 每月:按月生成文件
      • 每天:按天生成文件
      • 每小時:按小時生成文件
      • 每分鍾:按分鍾生成文件
    • 大小策略
      • 最大字節:設置單個文件大小(KB/MB/GB)
      • 最大文件數:設置保存的最大文件數量,超過后刪除最早文件
    • 其他策略(單個文件)

2.使用

NC中的Logger調用的都是靜態方法,如果在多個模塊中打印日志,會出現日志內容出現在不同輸出文件的情況,比較混亂,不建議直接使用,可再次封裝為日志工具,增加其他功能。(下方示例代碼使用StopWatch增加耗時統計功能)

package com.yonyou.yh.nhis.common.util;

import nc.bs.logging.Logger;

import org.apache.commons.lang3.time.StopWatch;
/**
 * 日志工具類封裝(記錄耗時)
 * 由於在不同類內使用會導致時間不統一,由靜態調用改為實例調用
 * @author walton
 * @date 2020-06-23
 */
public class HplusLogUtils {
	/** 初始化模塊名 */
	private String initName;
	/** 日志等級 */
	private Integer level;
	/** 時間記錄器 */
	private StopWatch sw;
	public static final int DEBUG = 0, INFO = 1, WARN = 2 ,ERROR = 3;
	
	/**
	 * 獲取實例
	 * @return
	 */
	public static HplusLogUtils getInstance(){
		return new HplusLogUtils();
	}
	
	/**
	 * 私有構造器
	 */
	private HplusLogUtils() {
		super();
		setSw(new StopWatch());
	}

	/**
	 * 打印日志前必須調用此方法(使用StopWatch記錄執行時間)
	 * @param moduleName 在日志配置文件({home}\ierp\bin\logger-config.properties)/(sysConfig.bat)中已配置的module
	 * @param msg 需要打印的日志消息
	 * @param level 日志級別([DEBUG = 0, INFO = 1, WARN = 2 ,ERROR = 3]默認為0)
	 */
	public void start(String moduleName,String msg,Integer level){
		String originModule = Logger.getModule();
		if(moduleName != null){
			setInitName(moduleName);
		}
		Logger.init(getInitName());
		setLevel(level==null?0:level);
		getSw().start();
		doPrintWithLevel(getLevel(),msg,getSw().getTime());
		Logger.init(originModule);
	}
	
	/**
	 * 調用start方法后,使用此方法進行分割記錄,(執行時間為從start開始到split的時間)
	 * @param msg
	 */
	public void split(String msg){
		String originModule = Logger.getModule();
		Logger.init(getInitName());
		getSw().split();
		doPrintWithLevel(getLevel(),msg,getSw().getSplitTime());
		Logger.init(originModule);
	}
	
	/**
	 * 記錄方法結束時必須調用此方法結束記錄(執行時間為start到stop的時間)
	 * @param msg
	 */
	public void stop(String msg){
		String originModule = Logger.getModule();
		Logger.init(getInitName());
		doPrintWithLevel(getLevel(),msg,getSw().getTime());
		getSw().stop();
		Logger.init(originModule);
	}
	
	/**
	 * 根據level選擇輸出日志級別(內部調用,如果需要其他輸出級別,可在此處擴展)
	 * @param level
	 * @param msg
	 * @param time
	 */
	private void doPrintWithLevel(Integer level,String msg,Long time){
		String printMsg = String.format("------ %s  已耗時: %s  ms ------", msg,time);
		switch(level){
		case 0:
			Logger.debug(printMsg);
			break;
		case 1:
			Logger.info(printMsg);
			break;
		case 2:
			Logger.warn(printMsg);
			break;
		case 3:
			Logger.error(printMsg);
			break;
		default:
			Logger.debug(printMsg);
			break;
		}
	}

	/**
	 * @return initName 初始化模塊名
	 */
	public String getInitName() {
		return initName;
	}

	/**
	 * @return level 日志等級
	 */
	public Integer getLevel() {
		return level;
	}

	/**
	 * @return sw 時間記錄器
	 */
	public StopWatch getSw() {
		return sw;
	}

	/**
	 * @param initName 要設置的 初始化模塊名
	 */
	public void setInitName(String initName) {
		this.initName = initName;
	}

	/**
	 * @param level 要設置的 日志等級
	 */
	public void setLevel(Integer level) {
		this.level = level;
	}

	/**
	 * @param sw 要設置的 時間記錄器
	 */
	public void setSw(StopWatch sw) {
		this.sw = sw;
	}

}

使用日志工具示例


HplusLogUtils logUtil = HplusLogUtils.getInstance();
logUtil.start("nhbd", "日志開始", HplusLogUtils.DEBUG);
logUtil.split("接口方法執行前");
//......調用的其他方法
logUtil.split("接口方法執行后");
logUtil.stop("日志結束");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM