最近写了几个接口和服务,发现自己在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>