java中的日志检查点
我目前有一个web服务,它存储键到某些值的映射,我设法创建了一个web服务接收的命令的后台日志系统。现在我必须实现一个将日志存储到文件中的检查指针,我已经将它实现为计时器任务的扩展。因此,我想我可以使用一个计时器来安排检查指针每20分钟左右执行一次任务。我的问题是,除了调用检查指针外,我还必须测试对服务的任何调用是否仍在处理中,等待它完成,然后阻止Web服务,直到我发送一个resume命令,这是一个quiesce方法java中的日志检查点,java,logging,Java,Logging,我目前有一个web服务,它存储键到某些值的映射,我设法创建了一个web服务接收的命令的后台日志系统。现在我必须实现一个将日志存储到文件中的检查指针,我已经将它实现为计时器任务的扩展。因此,我想我可以使用一个计时器来安排检查指针每20分钟左右执行一次任务。我的问题是,除了调用检查指针外,我还必须测试对服务的任何调用是否仍在处理中,等待它完成,然后阻止Web服务,直到我发送一个resume命令,这是一个quiesce方法 public class MyCheckpointer extends Tim
public class MyCheckpointer extends TimerTask implements Checkpointer {
ObjectOutputStream out;
FileOutputStream file;
MyLogger log;
public MyCheckpointer(MyLogger l)
{
File log_txt = new File("./log.txt");
try {
this.file = new FileOutputStream(log_txt);
this.out = new ObjectOutputStream(this.file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.log = l;
}
@Override
public void run() {
// TODO Auto-generated method stub
this.writeLog();
}
private void writeLog()
{
ArrayList<LogRecord> l = this.log.getArray();
Iterator<LogRecord> e = l.iterator();
do
{
try {
out.writeObject(e.next());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}while(e.hasNext());
}
}
公共类MyCheckpointer扩展TimerTask实现检查点{
对象输出流输出;
FileOutputStream文件;
迈洛格测井;
公共MyCheckpointer(MyLogger l)
{
文件log_txt=新文件(“./log.txt”);
试一试{
this.file=新文件输出流(log_txt);
this.out=新的ObjectOutputStream(this.file);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
this.log=l;
}
@凌驾
公开募捐{
//TODO自动生成的方法存根
this.writeLog();
}
私有无效写入日志()
{
ArrayList l=this.log.getArray();
迭代器e=l.迭代器();
做
{
试一试{
out.writeObject(e.next());
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
}while(e.hasNext());
}
}
我不知道它是否完全适合您的用例,但我建议您使用支持异步日志记录的日志框架,而不是使用自己的日志框架。例如,log4j提供了一个异步appender:。web服务实现和MyCheckpointer类可以共享一个同步对象。例如java.util.concurrent.Lock:
Lock lock = new ReentrantLock();
那么他们两人都应该打电话:
lock.lock();
service the command and log/write logs to file
lock.unlock();
很抱歉我忘了提到这是为学校作业做的,所以我需要手工完成每个部分。