Log4J: How do I redirect an OutputStream or Writer to logger's writer(s)?

后端 未结 5 983
陌清茗
陌清茗 2020-12-14 16:39

I have a method which runs asynchronously after start, using OutputStream or Writer as parameter.

It acts as a recording adapter for an OutputStream or Writer (i

5条回答
  •  有刺的猬
    2020-12-14 17:15

    Building on Arthur Neves answer, I transferred this for Slf4J. I also improved this a bit using StringBuffer and directly casting byte to char:

    import java.io.OutputStream;
    
    import org.slf4j.Logger;
    
    public class LogOutputStream extends OutputStream {
        private final Logger logger;
    
        /** The internal memory for the written bytes. */
        private StringBuffer mem;
    
        public LogOutputStream( final Logger logger ) {
            this.logger = logger;
            mem = new StringBuffer();
        }
    
        @Override
        public void write( final int b ) {
            if ( (char) b == '\n' ) {
                flush();
                return;
            }
            mem = mem.append( (char) b );
        }
    
        @Override
        public void flush() {
            logger.info( mem.toString() );
            mem = new StringBuffer();
        }
    }
    

提交回复
热议问题