Любой заинтересованный, решение, которое я нашел в том, чтобы вставить HTML мягкие переносы (­
) в выводимых String
с содержащими ГорбатыйРегистр текст и/или точки (также делает текст меньше).
- Измените logback.xml и Logback-test.xml файлов следующим образом:
<!-- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> -->
<encoder class="utils.MyLayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
....
- Скопируйте файл LayoutWrapperEncoder
из вашей извлеченного источника Logback банки и переименовать в MyLayoutWrapperEncoder
.
- Изменение несколько методов в этом классе
void writeHeader() throws IOException {
if (layout != null && (outputStream != null)) {
StringBuilder sb = new StringBuilder();
appendIfNotNull(sb, layout.getFileHeader());
appendIfNotNull(sb, layout.getPresentationHeader());
if (sb.length() > 0) {
sb.append(CoreConstants.LINE_SEPARATOR);
// replace a couple of header names with shorter and smaller text
String outString = sb.toString();
outString = outString.replaceAll("MethodOfCaller", "MoC").replaceAll("RelativeTime", "RT");
outString = outString.replaceAll("LineOfCaller", "LoC");
// make text smaller
outString = outString.replaceAll("<td class=(.+?)>", "<td style=\"font-size:13px\" class=$1>");
outputStream.write(convertToBytes(outString));
outputStream.flush();
}
}
}
и:
public void doEncode(E event) throws IOException {
String txt = layout.doLayout(event);
/*
* Identify "camel case" upper case letters and also dots in all <TD> output...
* and insert soft hyphen at this point. Also make text smaller.
*/
Pattern tDPattern = Pattern.compile("<td class=.+?>(.*?)</td>");
StringBuilder wholeStringSB = new StringBuilder();
Matcher tDMatcher = tDPattern.matcher(txt);
int lastWholeString = 0;
while(tDMatcher.find()){
String tDContents = tDMatcher.group(1);
Matcher camelCaseAndDotMatcher = Pattern.compile("[a-z]([A-Z\\.])").matcher(tDContents);
StringBuilder camelCaseAndDotSB = new StringBuilder();
int last = 0;
while(camelCaseAndDotMatcher.find()){
camelCaseAndDotSB.append(tDContents.substring(last, camelCaseAndDotMatcher.start(1)));
camelCaseAndDotSB.append("­" + camelCaseAndDotMatcher.group(1));
last = camelCaseAndDotMatcher.end(1);
}
if(last > 0){
// ... at least one camel case UC char and/or dot WAS found...
wholeStringSB.append(txt.substring(lastWholeString, tDMatcher.start(1)));
camelCaseAndDotSB.append(tDContents.substring(last));
wholeStringSB.append(camelCaseAndDotSB.toString().trim());
lastWholeString = tDMatcher.end();
}
}
wholeStringSB.append(txt.substring(lastWholeString).trim());
txt = wholeStringSB.toString();
// make text smaller
txt = txt.replaceAll("<td class=(.+?)>", "<td style=\"font-size:13px\" class=$1>");
outputStream.write(convertToBytes(txt));
if (immediateFlush)
outputStream.flush();
}
PS Я не узнал, где CSS для различных «класса» атрибуты этих различных TD элементы (или, если не фактические файлы, как они сгенерированы или что-то еще). Кто-нибудь знает?
PPS Несмотря на многообещающий подход, эти мягкие дефисы, похоже, не применяются к финальной колонке «Сообщение». Больше исследований, необходимых для действительно отличного решения!