你应该让你的应用程序代码的简单,即不用担心记录失败,委托记录故障记录器本身。
因此您的应用程序代码应该是这样的:
try{
this_will_throw_exception();
} catch(Exception e){
Log.error(e.getMessage());
}
现在我们来看看如何在记录处理失败。
首先,有很多提供appender故障转移的日志框架。例如,我们在log4j中有一个FailoverAppender,如果主节点失败,它将记录到辅助appender。 http://logging.apache.org/log4j/2.x/manual/appenders.html
如果您选择构建出于某种原因你自己的日志层,你可能会发现自己构建故障记录仪有用的装饰图案。
public interface Logger {
boolean error(String message);
}
public DataBaseLogger implements Logger {
...
}
public FileLogger implements Logger {
...
}
public FailoverLogger implements Logger {
private Logger primary;
private Logger secondary;
public boolean error(String message) {
boolean succeed = primary.error(message);
if (! succeed) {
secondary.error("Primary logger failed");
secondary.error(message);
// Try to restart the primary logger, however it might be difficult.
}
}
}
+1保持客户端代码简单。 – casablanca