Получите живые сообщения Log4J - PullRequest
2 голосов
/ 05 апреля 2011

Как получить то, что пишется log4j в центральном классе, который отслеживает все журналы log4j в приложении?

Спасибо

Редактировать: Хотелось бы, чтобы мне не приходилось читать его из файла журнала, поскольку он будет использовать больше ресурсов

Ответы [ 3 ]

6 голосов
/ 05 апреля 2011

Вы можете реализовать свой собственный Appender и скопировать все журналы в нем, используя обычную конфигурацию:

log4j.rootLogger=WARN, file, other

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/log.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %p %t %c - %m%n

log4j.appender.other=class.path.of.your.Appender
4 голосов
/ 06 сентября 2011

Может быть, ваше требование такое же со мной.Я просто пишу соответствующий класс, чтобы понять это.

public class FixedBufferAppender extends AppenderSkeleton {
    private LimitTailSizeList ll;

    public FixedBufferAppender(PatternLayout layOut, int size) {
        this.layout = layOut;
        ll = new LimitTailSizeList(size);
    }

    protected void append(LoggingEvent event) {
        String log = this.layout.format(event);
        ll.add(log);
    }

    public String getLatentLog() {
        StringBuffer sb = new StringBuffer(100000);
        for (Iterator iterator = ll.iterator(); iterator.hasNext();) {
            String log = (String) iterator.next();
            sb.append(log);
        }
        return sb.toString();
    }

    public void close() {
        ll.clear();
        ll = null;
        this.closed = true;
    }

    public boolean requiresLayout() {
        return true;
    }
}

public class LimitTailSizeList extends ArrayList {
    private int limitSize;

    public LimitTailSizeList(int limitSize){
        this.limitSize= limitSize;
    }

    public boolean add(Object o) {
        boolean add = super.add(o);
        if (size() > limitSize) {
            removeRange(0, size() - limitSize);
        }
        return add;
    }

    private void initAppender(int maxTailLine) {
        fba = new FixedBufferAppender(
            new PatternLayout("%d [%X{requestURIWithQueryString}] %-5p -[%t] %m  [%c{1}:%M %L] %n"),
            maxTailLine);
        Logger.getRootLogger().removeAppender("UI_APPENDER");
        fba.setName("UI_APPENDER");
        fba.setThreshold(org.apache.log4j.Level.DEBUG);
        Logger.getRootLogger().addAppender(fba);
    }
}
0 голосов
/ 05 апреля 2011

Предоставляя конфигурацию log4j, которая выводит сообщения журнала в файл или любое другое место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...