天天看點

NC-日志配置及代碼詳解

用友NC系列産品-日志配置及代碼說明

目錄

  • 一、日志檔案輸出說明
  • 二、日志配置說明
    • 2.1 配置檔案路徑
    • 2.2 配置格式
      • 2.2.1 參數說明
  • 三、代碼說明
  • 四、自定義日志執行個體
    • 執行個體1-建立日志類
    • 執行個體2-直接在代碼中使用日志輸出
  • 五、附錄
    • 參考文章

一、日志檔案輸出說明

日志目錄: /nchome/nclogs/servername/ ,其中servername叢集時目錄類似為master,ncMem01等。非叢集時目錄為:server1(服務名)

子產品 輸出格式 說明
anonymous anony-log.log 業務日志,如果沒有配置子產品,日志寫在該處
nclog nc-log.log 系統日志,是系統的主日志系統,所有錯誤日志都會輸出到該檔案。
pfxx pfxx-log.log 外部交換平台日志檔案
portal portal-log.log portal日志檔案
prealert pa-log.log 預警平台日志檔案
accountmanage am-log.log 系統管理更新日志檔案
nc.bs.framework fw-log.log IOC容器架構日志檔案
iufo iufo-log.log iufo日志檔案
userpower userpower-log.log 權限更新日志檔案
workflow wf-log.log 流程平台日志檔案
nc.bs.framework.mx.thread mwsummary-log.log 性能概要日志,記錄部分中間日志,結合NMC分析中間件使用
sql sql-log.log 系統執行sql日志檔案,結合NMC分析使用;一般不用設定為debug,調試時再設定
uapweb uapweb-log.log uapweb子產品日志檔案
nc.bs.framework.codesync codesync-log.log 代碼同步日志檔案
uapbdsearch uapbdsearch-log.log 企業搜尋日志檔案
uapadp uap-adp.log 分布系統日志檔案
scheduleengine schedule-log.log 排程引擎日志檔案
tmobm tmobm-log.log 資金銀企直聯子產品日志檔案
nc.itf.uap.queryengine qeddc-log.log 查詢引擎日志檔案
warningsql warningsql-log.log 引發警告條件的sql日志檔案,結合NMC分析使用

二、日志配置說明

2.1 配置檔案路徑

/nchome/ierp/bin/logger-config.properties
           

2.2 配置格式

mobileaim.level=DEBUG
mobileaim.pattern=$$callid=%X{serial} $$thread=[%t] $$host=%X{remoteAddr} $$userid=%X{user} $$ts=%d{yyyy-MM-dd HH:mm:ss} $$remotecall=[%A] $$debuglevel=%p $$msg=%m %n
mobileaim.file=./nclogs/${server}/mobileaim-log.log
mobileaim.size.maxSize=5MB
mobileaim.size.maxIndex=5
           

2.2.1 參數說明

mobileaim = 子產品名稱 <moduleName> 
level = 日志等級 
    ALL = new Level("ALL", 0);
    TRACE = new Level("TRACE", 1);
    DEBUG = new Level("DEBUG", 2);
    INFO = new Level("INFO", 3);
    WARN = new Level("WARN", 4);
    ERROR = new Level("ERROR", 5);
    NSTACK = new Level("NSTACK", 5);
    FATAL = new Level("FATAL", 6);
    OFF = new Level("OFF", 7);

pattern = 日志輸出格式
file = 日志輸出檔案
size.maxSize = 單日志檔案最大存儲
size.maxIndex = 日志最大個數
           

其中pattern配置說明如下:

%m 代碼中指定的具體日志資訊,message
%n 一個回車換行符,Windows平台為"\r\n",Unix平台為"\n"
%x 和目前線程相關聯的NDC上下文資訊(棧式)
%X{key} 和目前線程相關的MDC上下文變量(key/value形式)
// NCD與MDC見../JAVA/Log4j之MDC和NDC差別和用法
%C className 類名
%M methodName 方法名
%L lineNumber 線程号
%T logType 日志類型
%A moduleName 子產品名
%t 産生該日志事件的線程名
%d 輸出日志時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式
%p level,日志資訊的優先級
           

三、代碼說明

NC6X的日志架構為Log4j,NCC後更新為Log4j2

基本日志類

nc.bs.logging.Log;
// 可以基于該類實作自定義日志的輸出
Log defLog = Log.getInstance(moduleName);
           

日志級别

nc.bs.logging.Level;
ALL = new Level("ALL", 0);
TRACE = new Level("TRACE", 1);
DEBUG = new Level("DEBUG", 2);
INFO = new Level("INFO", 3);
WARN = new Level("WARN", 4);
ERROR = new Level("ERROR", 5);
NSTACK = new Level("NSTACK", 5);
FATAL = new Level("FATAL", 6);
OFF = new Level("OFF", 7);
           

日志事件參數類

org.apache.log4j.spi.LoggingEvent;
// NC對該類的繼承
nc.bs.logging.impl.log4j.Log4jLoggingEvent;
           

pattern參數解析類

org.apache.log4j.PatternLayout
// NC的繼承
nc.bs.logging.impl.log4j.Log4jPatternFormatter;
           

四、自定義日志執行個體

logger-config.properties配置如下:

# liyas add 20200911 接口日志
uapport.level=DEBUG
uapport.pattern=$$callid=%X{serial} $$thread=[%t] $$host=%X{remoteAddr} $$userid=%X{user} $$ts=%d{yyyy-MM-dd HH:mm:ss} $$debuglevel=%p $$module=[%A] $$class=[%C] $$method=[%M] $$msg=%m %n
uapport.file=./nclogs/${server}/uapport-log.log
uapport.size.maxSize=5MB
uapport.size.maxIndex=5
           

執行個體1-建立日志類

package nc.bs.logging;
import nc.bs.logging.Log;
/**
 * 系統對外接口日志輸出類
 * @author liyas 2020-07-27
 *
 */
public class UapPortLogger {
	private static String LOGFILE = "uapport";

	public static void debug(Object msg, Class caller, String methodName) {
		Log LOGFILELog = Log.getInstance(LOGFILE);
		LOGFILELog.debug(msg, caller, methodName);
	}

	public static void info(Object msg, Class caller, String methodName) {
		Log portLog = Log.getInstance(LOGFILE);
		portLog.info(msg, caller, methodName);
	}

	public static void error(Object msg, Throwable exception, Class caller,
			String methodName) {
		Log portLog = Log.getInstance(LOGFILE);
		portLog.error(msg, exception, caller, methodName);
	}

	public static void error(Object msg, Class caller, String methodName) {
		Log portLog = Log.getInstance(LOGFILE);
		portLog.error(msg, caller, methodName);
	}

	public static void warn(Object msg, Throwable exception, Class caller,
			String methodName) {
		Log portLog = Log.getInstance(LOGFILE);
		portLog.warn(msg, exception, caller, methodName);
	}

	public static void warn(Object msg, Class caller, String methodName) {
		Log portLog = Log.getInstance(LOGFILE);
		portLog.warn(msg, caller, methodName);
	}
}
           

執行個體2-直接在代碼中使用日志輸出

// 将日志輸出至uapport檔案
Log.getInstance("uapport").info("message",this.getClass(),"Method");
           

五、附錄

參考文章

Log4j.properties配置詳解

Log4j之MDC和NDC用法

nc

繼續閱讀