
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