9.6 例子:独立的记录类
第二个例子涉及一个学生项目中的错误日志记录。一个类包含了如下几行代码:
try {
rpcConn = connectionPool.getConnection(dest);
} catch (IOException e) {
NetworkErrorLogger.logRpcOpenError(req, dest, e);
return null;
}
不是在检测到错误的地方记录错误日志,而是调用一个特殊的错误日志记录类中的单独方法。该错误日志记录类是在同一源文件的末尾定义的:
private static class NetworkErrorLogger {
/**
* Output information relevant to an error that occurs when trying
* to open a connection to send an RPC.
*
* @param req
* The RPC request that would have been sent through the
connection
* @param dest
* The destination of the RPC
* @param e
* The caught error
*/
public static void logRpcOpenError(RpcRequest req, AddrPortTuple
dest, Exception e) {
logger.log(Level.WARNING, "Cannot send message: " + req + ". \n" +
"Unable to find or open connection to " + dest + " :" +
e);
}
...
}
NetworkErrorLogger
类包含几个方法,如logRpcSendError
和logRpcReceiveError
,每个方法都记录了不同种类的错误日志。
这种分离增加了复杂性,却没有任何好处。日志记录方法是浅的:它们大多由一行代码组成,但需要大量的文档。每个方法只在一个地方被调用。日志记录方法高度依赖于它们的调用:阅读调用的人很可能会切换到日志记录方法,以确保记录了正确的信息;同样,阅读日志记录方法的人可能会切换到调用的地方,以了解该方法的目的。
在这个例子中,最好是消除日志记录方法并将日志记录语句放在检测到错误的位置。这将使代码更易于阅读,并消除日志记录方法所需的接口。
Last updated