1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.juli;
public class LogUtil {
private LogUtil() {
// Utility class. Hide default constructor
}
/**
* Escape a string so it can be displayed in a readable format. Characters that may not be printable in some/all of
* the contexts in which log messages will be viewed will be escaped using Java \\uNNNN escaping.
* <p>
* All control characters are escaped apart from horizontal tab (\\u0009), new line (\\u000a) and carriage return
* (\\u000d).
*
* @param input The string to escape
*
* @return The escaped form of the input string
*/
@SuppressWarnings("null") // sb is not null when used
public static String escape(final String input) {
final int len = input.length();
int i = 0;
int lastControl = -1;
StringBuilder sb = null;
while (i < len) {
char c = input.charAt(i);
if (Character.getType(c) == Character.CONTROL) {
if (!(c == '\t' || c == '\n' || c == '\r')) {
if (lastControl == -1) {
sb = new StringBuilder(len + 20);
}
sb.append(input.substring(lastControl + 1, i));
sb.append(String.format("\\u%1$04x", Integer.valueOf(c)));
lastControl = i;
}
}
i++;
}
if (lastControl == -1) {
return input;
} else {
sb.append(input.substring(lastControl + 1, len));
return sb.toString();
}
}
}
|