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

com.sghd.logging.PathUtils Maven / Gradle / Ivy

The newest version!
package com.sghd.logging;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;

import com.sghd.common.utils.time.CronUtils;

public class PathUtils {
	/** URI 匹配模式 */
	public static final Pattern REGEX_PATTERN = Pattern.compile("\\{([\\w,-]{1,})\\}");

	/** 服ID转换器 */
	protected static ServerIdConverter SERVER_ID_CONVERTER;

	/** 服ID转换器 */
	public static void setServerIdConverter(ServerIdConverter serverIdConverter) {
		PathUtils.SERVER_ID_CONVERTER = serverIdConverter;
	}

	/**
	 * 路径构建
	 * @param directoryName
	 * @param filePattern
	 * @param datePattern
	 * @param name
	 * @param message
	 * @return
	 */
	public static String getPath(String directoryName, String filePattern, String datePattern, String name,	Record message) {
		Map params = new LinkedHashMap();
		params.put("name", name);
		// TIME
		Date time = new Date(message.getTime());
		if (!StringUtils.isEmpty(datePattern)) {
			time = CronUtils.getTimeBefore(datePattern, time);
		}
		params.put("time", time);
		// OID, SID
		int operator;
		int area;
		operator = message.getOperator();
		area = message.getArea();
		if (SERVER_ID_CONVERTER != null) {
			area = SERVER_ID_CONVERTER.convert(operator, area);
		}
		params.put("operator", operator);
		params.put("server", area);
		
		// PATH
		Matcher matcher = REGEX_PATTERN.matcher(filePattern);
		StringBuffer sb = new StringBuffer();
		sb.append(directoryName);
		sb.append(File.separator);
		String key;
		while (matcher.find()) {
			String group = matcher.group(1);
			int idx = group.indexOf(',');
			if (idx > 0) {
				key = group.substring(0, idx);
			} else {
				key = group;
			}

			String replace = key;
			Object value = params.get(key);
			if (value instanceof Date) {
				String format = group.substring(idx + 1);
				replace = new SimpleDateFormat(format).format(value);
			} else if (value != null) {
				replace = value.toString();
			}
			matcher.appendReplacement(sb, replace);
		}
		matcher.appendTail(sb);
		return sb.toString();
	}
	
	public static void main(String[] args) {
		Record message = EmptyRecord.valueOf(1, 1, System.currentTimeMillis());
		System.out.println(getPath("logs/flog", "{operator}_{server}_{name}.{time,yyyy-MM-dd}", null, "Currency",  message));
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy