1.SysConfig配置
{HOME}/bin/sysConfig.bat
引入配置文件
{HOME}/ierp/bin/logger-config.properties

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

各配置項說明
- 模塊:用於標識日志模塊的名稱,可根據需要自行增加
- 包前綴:暫未使用
- 級別:控制日志輸出級別(下列級別由低到高),可根據實際情況選擇級別以便控制日志輸出。
- ALL
- DEBUG
- INFO
- WARN
- ERROR
- NSTAC
- OFF
- 輸出:設置日志輸出文件的位置(一般設置在Home的nclog文件夾下)
- 格式: 控制日志輸出的格式
- %p: 日志級別
- %X{serial}:訪問ID
- %t: 線程標識
- %X{remoteAddr}: 訪問地址
- %X{user}: 訪問人
- %d{yyyy-MM-dd HH:mm:ss}: 日志輸出時間
- %m: 日志輸出信息
- %n: 換行
- 滾動策略: 控制日志文件的拆分規則,何種條件下生成新文件,備份或刪除舊文件
- 時間策略
- 每年:按年生成文件
- 每月:按月生成文件
- 每天:按天生成文件
- 每小時:按小時生成文件
- 每分鍾:按分鍾生成文件
- 大小策略
- 最大字節:設置單個文件大小(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("日志結束");
