在項目中記錄日誌

最近寫了幾個接口和服務,發現自己在java基礎部分的幾個薄弱環節:

        1.日誌的記錄。2.對於異常的捕獲與處理。3.對應文件讀寫的綜合運用,尤其是結合線程。4.webservice的寫法模式還需要鞏固5.Hessian的用法,有空總結一下。

下面就日誌的記錄做一下總結:

        以前沒有養成寫規範日誌的習慣,一直都用println語句輸出控制檯,上線之後,查看錯誤日誌本來就是一件很頭疼的事情,而且看見自己的日誌一團糟更煩了,看見別人的項目日誌都很有規律,所以學習了一下。技術很簡單,但是作爲基礎,每個項目基本上都能用到,記錄一下,以後好用。先貼代碼,下面再解釋

Logger類:(定義三個基本的方法,logDebug,logInfo,logError)
public abstract class Logger {
	protected boolean debug = true;

	public abstract void logError(String message);

	public void logDebug(String message) {
		if (!debug)
			return;
	}

	public abstract void logInfo(String message);

	public boolean isDebug() {
		return debug;
	}

	public void setDebug(boolean debug) {
		this.debug = debug;
	}

}

LoggerFactory類:(logger一般是通過配置文件指定具體是哪種實現類,在這裏爲了簡單說明,直接new了)

public class LoggerFactory {
	public static Logger logger = new SystemLogger();

	public static Logger getLogger() {
		return logger;
	}

	public void setLogger(Logger logger) {
		LoggerFactory.logger = logger;
	}

}

SystemLogger實現類:

public class SystemLogger extends Logger {
	public static final String DEBUG = "[DEBUG]\t";
	public static final String ERROR = "[ERROR]\t";
	public static final String INFO = "[INFO]\t";

	@Override
	public void logDebug(String message) {
		super.logDebug(message);
		System.out.println(DEBUG + message);
	}

	@Override
	public void logError(String message) {
		System.err.println(ERROR + message);
	}

	@Override
	public void logInfo(String message) {
		System.out.println(INFO+message);
	}
}
Log4jLogger實現類:
public class Log4jLogger extends Logger {
	private static final Log errorlog = LogFactory.getLog("Error");

	private static final Log infoLog = LogFactory.getLog("Info");
	private static final Log debugLog = LogFactory.getLog("Debug");

	@Override
	public void logError(String message) {
		errorlog.error(message);
	}

	@Override
	public void logDebug(String message) {
		super.logDebug(message);
		debugLog.debug(message);
	}

	@Override
	public void logInfo(String message) {
		infoLog.info(message);
	}

}

這裏解釋一下SystemLogger與Log4jLogger的區別,SystemLogger一般用於控制檯輸出,也就是上線之後在logs下生成的日誌文件,不需要配置文件。Log4jLogger一般用於輸出到文件,而且可以log4j的配置生成對個文件。如果不爲生成文件,只爲記錄程序運行過程的記錄,用SystemLogger就可以了。

測試類

Logger logger = LoggerFactory.getLogger();
String msg = "msg";
logger.logDebug("dao get Id "+msg);

結果:[DEBUG]    dao get Id msg

這樣去查日誌的話就很規範了。

對於log4j的話,也可以不用這個類,直接LogFactory.getLog(String.class).info("log4j測試");就可以了。log4j的配置參數在下面一篇文章裏再做說明。


補充:在spring配置文件裏面的配置:

    <bean id="Logger"
        class="com.tenddata.global.service.standardization.commons.log.impl.SystemLogger">
        <property name="debug" value="true"></property>
    </bean>

    <bean id="LoggerFactory"
        class="com.tenddata.global.service.standardization.common.factory.LoggerFactory">
        <property name="logger" ref="Logger"></property>
    </bean>




發佈了25 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章