当前位置: 代码迷 >> 综合 >> log4j2 源码分析
  详细解决方案

log4j2 源码分析

热度:18   发布时间:2023-12-21 16:35:24.0

1.初始化 Logger logger = LogManager.getLogger(MyTest.class);

org.apache.logging.log4j.LogManager.getLogger()

LoggerContext.start()

LoggerContext.reconfigure()

LoggerContext.setConfiguration()

org.apache.logging.log4j.core.config.BaseConfiguration.start()

org.apache.logging.log4j.core.config.BaseConfiguration.createConfiguration(final Node node, final LogEvent event)

org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(final PluginType<T> type, final Node node, final LogEvent event)

RandomAccessFileAppender.createAppender()

 

2.执行 logger.info("test");

 

1. org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(final LogEvent event) //Actual writing occurs here.

2. org.apache.logging.log4j.core.layout.AbstractStringLayout.toByteArray(final LogEvent event)

3. org.apache.logging.log4j.core.appender.OutputStreamManager.write(final byte[] bytes)

4. org.apache.logging.log4j.core.appender.RandomAccessFileManager.write(final byte[] bytes, int offset, int length)

 

protected synchronized void write(final byte[] bytes, int offset, int length) {

    super.write(bytes, offset, length); // writes to dummy output stream

 

    int chunk = 0;

    do {

        if (length > buffer.remaining()) {

            flush();

        }

        chunk = Math.min(length, buffer.remaining());

        buffer.put(bytes, offset, chunk);

        offset += chunk;

        length -= chunk;

    } while (length > 0);

 

    if (isImmediateFlush || isEndOfBatch.get() == Boolean.TRUE) {

        flush();

    }

}