最近寫了幾個接口和服務,發現自己在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>