Labeled Tab-separated Values (LTSV)でJavaを探した。
あのさあ……。Apacheとか洞うでも好いからさあ (Tomcat特有の傲慢)。
書いた。
因みにC# (.NET) のは昔書いた。
cf. C# でLTSVを壊したり組み立てたりするの書いた http://c4se.hatenablog.com/entry/2013/02/09/003554
cf. 極めて愚かな事をしていたLTSV .NETを更新した (class名を変更した) http://c4se.hatenablog.com/entry/2013/02/24/035011
import java.io.Serializable; import java.util.HashMap; import java.util.Map; import lombok.val; /** * Labeled Tab-separated Values (LTSV) http://ltsv.org/ * * License: Public Domain * * @author ne_Sachirou */ public class Ltsv implements Serializable { /** * */ private static final long serialVersionUID = 5281168493052765519L; private Map<String, String> record = new HashMap<>(); /** * * @param key * @param value * @return */ public Ltsv put(String key, Object value) { record.put(key, value.toString()); return this; } /** * * @param externalMap * @return */ public Ltsv append(Map<String, Object> externalMap) { for (val entry : externalMap.entrySet()) put(entry.getKey(), entry.getValue()); return this; } /** * */ @Override public String toString() { StringBuffer buffer = new StringBuffer(); for (val entry : record.entrySet()) { val key = entry.getKey().replaceAll("[^0-9A-Za-z_.-]", "_").trim(); val value = entry.getValue().toString() .replaceAll("[:\t\n\r]", " ").trim(); buffer.append(key + ":" + value + "\t"); } return buffer.substring(0, buffer.length() - 1); } }
memo
cf. ApacheログをLTSV形式にする際の2つの落とし穴と対処法+Apache&FluentdのLTSV設定サンプル - Y-Ken Studio http://y-ken.hatenablog.com/entry/apache-tips-ltsv-access-log
cf. ServletRequest (Java EE 6 ) http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html
cf. ServletResponse (Java EE 6 ) http://docs.oracle.com/javaee/6/api/javax/servlet/ServletResponse.html