К сожалению, я думаю, что ответ в том, что вы не можете делать то, что хотите, с HtmlLayout
, предоставленным log4j2. Похоже, что HtmlLayout
предназначался для генерации одного html-файла за одно выполнение.
Если вы посмотрите на исходный код для HtmlLayout , вы увидите следующий код:
@Override
public byte[] getHeader() {
final StringBuilder sbuf = new StringBuilder();
append(sbuf, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" ");
...
appendLs(sbuf, "<html>");
...
appendLs(sbuf, "<table ...");
...
return sbuf.toString().getBytes(getCharset());
}
....
@Override
public byte[] getFooter() {
final StringBuilder sbuf = new StringBuilder();
appendLs(sbuf, "</table>");
appendLs(sbuf, "<br>");
appendLs(sbuf, "</body></html>");
return getBytes(sbuf.toString());
}
Код явно ожидает создания нового HTML-документа каждый раз, поскольку вы можете видеть открывающие HTML-теги в getHeader
и закрывающие теги в getFooter
.
Вы можете написать свой собственный макет , чтобы делать то, что вы хотите, но проблема, с которой вы столкнетесь, заключается в определении, когда писать нижний колонтитул. Вы не хотите писать нижний колонтитул, пока не закончите с файлом, поэтому вам придется каким-то образом реализовать способ обнаружения этой ситуации (при условии, что вы хотите иметь чистый HTML в своем журнале).
Если вам не нужен чистый HTML, просто не пишите нижний колонтитул. В этом случае вы можете просто скопировать класс HtmlLayout
и слегка изменить его, чтобы создать новый макет, в котором не будет написано нижний колонтитул. Например:
//your package and imports go here
...
@Plugin(name = "NoFooterHtmlLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true)
public final class NoFooterHtmlLayout extends AbstractStringLayout {
//Various other methods copied from HtmlLayout go here
...
@Override
public byte[] getFooter() {
return new byte[0];
}
//Various other methods copied from HtmlLayout go here
...
}
и затем в вашей конфигурации log4j2 вы будете использовать это:
<NoFooterHtmlLayout charset="UTF-8" title="My Title"
locationInfo="true" />
Надеюсь, это поможет!