org.jabylon.log.viewer.pages.util.LogTail.java Source code

Java tutorial

Introduction

Here is the source code for org.jabylon.log.viewer.pages.util.LogTail.java

Source

/**
 * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 */
package org.jabylon.log.viewer.pages.util;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.util.Deque;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.io.CountingInputStream;

public class LogTail implements Serializable {

    private static final long serialVersionUID = 5184339368885208428L;
    private String logFile;
    private long currentChunk;
    private static final Logger LOG = LoggerFactory.getLogger(LogTail.class);

    public LogTail(String logFile) {
        this.logFile = logFile;
    }

    public void nextChunk(int maxLines, Deque<String> buffer) {
        BufferedReader reader = null;
        try {
            CountingInputStream in = new CountingInputStream(new FileInputStream(logFile));
            //buffer of 1 is slow, but at least predictable, so we can reset
            reader = new BufferedReader(new InputStreamReader(in), 1);
            reader.skip(currentChunk);
            String s = null;
            int lines = 0;
            while ((s = reader.readLine()) != null) {
                buffer.add(s);
                lines++;
                //unless it's the first chunk we stop once we reached max lines
                if (currentChunk > 0 && lines == maxLines)
                    break;
            }
            currentChunk = in.getCount();
        } catch (FileNotFoundException e) {
            LOG.warn("Logfile does not seem to exist (yet)", e);
        } catch (IOException e) {
            LOG.warn("Failed to read logfile", e);
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                LOG.error("Failed to close the logfile", e);
            }
        }
    }
}