package jp.vmi.selenium.selenese.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.slf4j.bridge.SLF4JBridgeHandler; /** * Utilities for logging. */ public final class LoggerUtils { private LoggerUtils() { } /** * switch java.util.logging handler to slf4j. */ public static void initLogger() { SLF4JBridgeHandler.removeHandlersForRootLogger(); SLF4JBridgeHandler.install(); } private static final Pattern META_CHAR_RE = Pattern.compile("[\u0000-\u001F\u0080\\\\\"]"); /** * quote control code, backslash and doublequote. * * @param buffer result buffer. * @param str raw string. * @return same as buffer. */ public static StringBuilder quote(StringBuilder buffer, String str) { buffer.append('"'); Matcher matcher = META_CHAR_RE.matcher(str); int start; for (start = 0; matcher.find(start); start = matcher.end()) { int end = matcher.start(); if (start < end) buffer.append(str.substring(start, end)); buffer.append('\\'); char ch = matcher.group().charAt(0); switch (ch) { case '\\': case '"': buffer.append(ch); break; case '\t': buffer.append('t'); break; case '\r': buffer.append('r'); break; case '\n': buffer.append('n'); break; default: buffer.append(String.format("x%02X", ch)); break; } } buffer.append(str.substring(start)); return buffer.append('"'); } /** * quote control code, backslash and doublequote. * * @param str raw string. * @return quoted string. */ public static String quote(String str) { return quote(new StringBuilder(str.length() + 8), str).toString(); } /** * quote control code, backslash and doublequote for each strings. * * @param strs raw strings. * @return quoted strings. */ public static String[] quote(String[] strs) { int len = strs.length; String[] result = new String[len]; for (int i = 0; i < len; i++) result[i] = quote(strs[i]); return result; } }