All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hecloud.runtime.common.file.LogCrawler Maven / Gradle / Ivy

package com.hecloud.runtime.common.file;

import com.hecloud.runtime.common.model.GenericResult;
import com.hecloud.runtime.common.model.LogBean;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.RandomAccessFile;

/**
 * 日志文件抓取类
 *
 * @author LoveinBJ
 */
public class LogCrawler {
    private static Logger logger = LoggerFactory.getLogger(LogCrawler.class);

    public static GenericResult crawl(String path, Long position, Long size) {
        if (StringUtils.isEmpty(path)) {
            logger.error("日志文件路径为空!");
            return new GenericResult<>(false, "日志文件不存在!");
        }
        File logFile = new File(path);
        if (logFile.exists() && logFile.isFile()) {
            long length = logFile.length();
            if (0 == length) {
                logger.error("AuditLog File {} size is 0", path);
                return new GenericResult<>(false, "日志文件为空!");
            }
            if (0 >= position || position > length) {
                position = length;
            }
            if (size <= position) {
                position = position - size;
            } else {
                position = 0L;
            }
            try (RandomAccessFile logRandomFile = new RandomAccessFile(logFile, "rw")) {
                StringBuilder builder = new StringBuilder();
                logRandomFile.seek(position);
                if (size > 0) {
                    while (logRandomFile.readByte() != '\n') {
                    }
                }
                String tmp;
                while ((tmp = logRandomFile.readLine()) != null) {
                    builder.append(new String(tmp.getBytes("ISO-8859-1"))).append("\n");
                }
                position = logRandomFile.length();
                LogBean logBean = new LogBean(position, builder.toString());
                return new GenericResult<>(true, "success", logBean);
            } catch (Exception e) {
                logger.error("get log content error:", e);
                return new GenericResult<>(false, "获取日志内容失败!");
            }
        } else {
            logger.error("Log File {} does not exist!", path);
            return new GenericResult<>(false, "日志文件不存在!");
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy