以Hadoop中的这些代码片段为例:
行 780 ,public void deleteAsUser(DeletionAsUserContext ctx) https://github.com/apache/hadoop/blob/e6b74164e9fc50518e03629c99525c2136c01593/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/LinuxContainerExecutor.java 和行 622 ,public void deleteAsUser(DeletionAsUserContext ctx) https://github.com/apache/hadoop/blob/3d65dbe032e202361d613344ccc6d9c5f99ba395/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java
这两个类都扩展了抽象类“ContainerExecutor.java”。我们可以看到这两个方法并不那么相似,它们都有相同的日志语句,LOG.info(“删除路径:”+ del);:
LinuxContainerExecutor.java
for (Path baseDir : baseDirs) {
Path del = dir == null ? baseDir : new Path(baseDir, dir);
LOG.info("Deleting path : " + del);
pathsToDelete.add(del.toString());
deleteAsUserOp.appendArgs(baseDir.toUri().getPath());
}
DefaultContainerExecutor.java
for (Path baseDir : baseDirs) {
Path del = subDir == null ? baseDir : new Path(baseDir, subDir);
LOG.info("Deleting path : " + del);
try {
if (!lfs.delete(del, true)) {
LOG.warn("delete returned false for path: [" + del + "]");
}
} catch (FileNotFoundException e) {
continue;
}
}
如果我将这两个日志记录语句中的日志字符串提取到其父类并使用该变量替换原始日志消息会更好,这样如果我想在将来改进日志消息,我只能修改变量(如果不是,其中一个可能很容易被遗忘,日志也会不一致)。
例如:
String DELETE_PATH_LOG = "Deleting path : ";
或者,如果有其他方法可以改善这种情况?