2017-02-16 14 views
0

Я использую этот макет с RollingFileAppender.logback HTMLLayout страница слишком широкая

Все работает очень хорошо, но есть только одна проблема: обычно ширина пикселя создаваемой таблицы просто слишком широка.

Это особенно важно, потому что многие из моих имен меток, как правило, очень длинные ... они уходят с правого края окна, и мне постоянно приходится прокручивать вправо и влево.

Я также использую (Firefox) надстройку NoSquint, где вы можете существенно увеличить размер текста независимо от «общего увеличения». Но это не работает. Я просто хочу указать максимальную (и минимальную, а почему нет?) Ширину пикселя для каждого столбца таблицы.

ответ

0

Любой заинтересованный, решение, которое я нашел в том, чтобы вставить 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("&shy;" + 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 Несмотря на многообещающий подход, эти мягкие дефисы, похоже, не применяются к финальной колонке «Сообщение». Больше исследований, необходимых для действительно отличного решения!