Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的日志检查点_Java_Logging - Fatal编程技术网

java中的日志检查点

java中的日志检查点,java,logging,Java,Logging,我目前有一个web服务,它存储键到某些值的映射,我设法创建了一个web服务接收的命令的后台日志系统。现在我必须实现一个将日志存储到文件中的检查指针,我已经将它实现为计时器任务的扩展。因此,我想我可以使用一个计时器来安排检查指针每20分钟左右执行一次任务。我的问题是,除了调用检查指针外,我还必须测试对服务的任何调用是否仍在处理中,等待它完成,然后阻止Web服务,直到我发送一个resume命令,这是一个quiesce方法 public class MyCheckpointer extends Tim

我目前有一个web服务,它存储键到某些值的映射,我设法创建了一个web服务接收的命令的后台日志系统。现在我必须实现一个将日志存储到文件中的检查指针,我已经将它实现为计时器任务的扩展。因此,我想我可以使用一个计时器来安排检查指针每20分钟左右执行一次任务。我的问题是,除了调用检查指针外,我还必须测试对服务的任何调用是否仍在处理中,等待它完成,然后阻止Web服务,直到我发送一个resume命令,这是一个quiesce方法

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();

很抱歉我忘了提到这是为学校作业做的,所以我需要手工完成每个部分。