⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 daterollingfileappender.java

📁 用java开发的一些实用的短信通信模块其中包含MD5加密、http发送等信息
💻 JAVA
字号:
package lib.commons.logging;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;

import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang.CharEncoding;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.io.FilenameUtils;

import lib.commons.Utils;

public class DateRollingFileAppender extends LogAppender {
	private String fileDirectory, fileNamePattern, fileDateFormat,
			fileEncoding;

	private boolean flushEveryTime;

	private String currentDate, currentFileName;

	private Object lockObject = new Object();

	private PrintWriter fileWriter = null;

	public DateRollingFileAppender(Configuration configuration,
			LogLayout logLayout) {
		super(configuration, logLayout);
		if (null != configuration) {
			fileDirectory = configuration.getString("fileDirectory");
			fileNamePattern = configuration.getString("fileNamePattern");
			fileDateFormat = configuration.getString("fileDateFormat");
			fileEncoding = configuration.getString("fileEncoding");
			flushEveryTime = configuration.getBoolean("flushEveryTime");
		}
	}

	public String getFileDirectory() {
		return null == fileDirectory ? Utils.EMPTY_STRING : fileDirectory;
	}

	public String getFileNamePattern() {
		return fileNamePattern;
	}

	public String getFileDateFormat() {
		return null == fileDateFormat ? "yyyyMMdd" : fileDateFormat;
	}

	public String getFileEncoding() {
		return (CharEncoding.isSupported(fileEncoding) ? fileEncoding
				: CharEncoding.UTF_8);
	}

	public boolean isFlushEveryTime() {
		return flushEveryTime;
	}

	public String getCurrentFileName() {
		return currentFileName;
	}

	public void append(LogInfo logInfo) {
		switchFile(logInfo);
		synchronized (lockObject) {
			if (null == fileWriter) {
				if (!(LogFactory.getDfltLogAppender() instanceof DateRollingFileAppender)) {
					LogFactory.getDfltLogAppender().append(logInfo);
					if (isFlushEveryTime())
						LogFactory.getDfltLogAppender().flush();
				}
			} else {
				String message = getLogLayout().formatLogInfo(logInfo);
				fileWriter.println(message);
				if (isFlushEveryTime())
					fileWriter.flush();
			}
		}
	}

	public void close() {
		if (null != fileWriter) {
			synchronized (lockObject) {
				if (null != fileWriter) {
					fileWriter.flush();
					fileWriter.close();
					fileWriter = null;
				}
			}
		}
	}

	public void flush() {
		if (null != fileWriter) {
			synchronized (lockObject) {
				if (null != fileWriter) {
					fileWriter.flush();
				}
			}
		}
	}

	private void switchFile(LogInfo logInfo) {
		String fileDate = DateFormatUtils.format(logInfo.getLogDate(),
				getFileDateFormat());
		if (!fileDate.equals(currentDate)) {
			synchronized (lockObject) {
				if (null != fileWriter) {
					fileWriter.flush();
					fileWriter.close();
					fileWriter = null;
				}

				File dir = new File(getFileDirectory());
				if (!dir.exists()) {
					dir.mkdirs();
				}

				String fileName = StringUtils.replace(fileNamePattern,
						"${date}", fileDate);

				String filePath = FilenameUtils.concat(getFileDirectory(),
						fileName);
				PrintWriter tmpWriter = null;
				try {
					tmpWriter = new PrintWriter(
							new OutputStreamWriter(
									new PrintStream(new FileOutputStream(
											filePath, true), true),
									getFileEncoding()));
					fileWriter = tmpWriter;
					currentDate = fileDate;
					currentFileName = fileName;
				} catch (Exception err) {
					err.printStackTrace();
					if (null != tmpWriter)
						tmpWriter.close();
				}
			}
		}
	}

	public static void main(String[] args) {
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -