/** * Copyright 2016, Xiaomi. * All rights reserved. * Author: xiajun@xiaomi.com */ package com.xiaomi.infra.galaxy.lcs.log.core.appender; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.xiaomi.infra.galaxy.lcs.log.core.ILogger; import com.xiaomi.infra.galaxy.lcs.log.core.LoggerConstants; import com.xiaomi.infra.galaxy.lcs.log.core.file.LCSFileWriter; import com.xiaomi.infra.galaxy.talos.thrift.Message; public class LCSFileAppenderImpl extends LCSAppender { private String rootFilePath; private long maxFileNumber; private long rotateFileBytes; private long rotateFileIntervalMillis; private List<Message> emptyMessageList; private LCSFileWriter talosFileWriter; public LCSFileAppenderImpl(ILogger logger) { super(logger); maxFileNumber = LoggerConstants.DEFAULT_MAX_FILE_NUMBER; rotateFileBytes = LoggerConstants.DEFAULT_ROTATE_FILE_BYTES; rotateFileIntervalMillis = LoggerConstants.DEFAULT_ROTATE_FILE_INTERVAL_MILLIS; } public String getRootFilePath() { return rootFilePath; } public void setRootFilePath(String rootFilePath) { this.rootFilePath = rootFilePath; } public long getMaxFileNumber() { return maxFileNumber; } public void setMaxFileNumber(long maxFileNumber) { this.maxFileNumber = maxFileNumber; } public long getRotateFileBytes() { return rotateFileBytes; } public void setRotateFileBytes(long rotateFileBytes) { this.rotateFileBytes = rotateFileBytes; } public long getRotateFileIntervalMillis() { return rotateFileIntervalMillis; } public void setRotateFileIntervalMillis(long rotateFileIntervalMillis) { this.rotateFileIntervalMillis = rotateFileIntervalMillis; } @Override protected void doStart() { emptyMessageList = new ArrayList<Message>(); talosFileWriter = new LCSFileWriter(logger, topicName, rootFilePath, maxFileNumber, rotateFileBytes, rotateFileIntervalMillis); talosFileWriter.init(); } @Override public void doClose() { if (talosFileWriter != null) { talosFileWriter.close(); } } @Override protected void doPeriodCheck() { try { talosFileWriter.writeMessage(emptyMessageList); } catch (IOException e) { logger.error("TalosFileAppender periodCheck failed, " + e.toString()); } } @Override protected void doFlushMessage(List<Message> messageList) throws Exception { talosFileWriter.writeMessage(messageList); } }