public ListAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout, final boolean newline, final boolean raw) { super(name, filter, layout); this.newLine = newline; this.raw = raw; if (layout != null && !(layout instanceof SerializedLayout)) { final byte[] bytes = layout.getHeader(); if (bytes != null) { write(bytes); } } }
@Override public synchronized void append(final LogEvent event) { final Layout<? extends Serializable> layout = getLayout(); if (layout == null) { if (event instanceof MutableLogEvent) { // must take snapshot or subsequent calls to logger.log() will modify this event events.add(((MutableLogEvent) event).createMemento()); } else { events.add(event); } } else if (layout instanceof SerializedLayout) { final byte[] header = layout.getHeader(); final byte[] content = layout.toByteArray(event); final byte[] record = new byte[header.length + content.length]; System.arraycopy(header, 0, record, 0, header.length); System.arraycopy(content, 0, record, header.length, content.length); data.add(record); } else { write(layout.toByteArray(event)); } if (countDownLatch != null) { countDownLatch.countDown(); } }
@Override public synchronized void append(final LogEvent event) { final Layout<? extends Serializable> layout = getLayout(); if (layout == null) { events.add(event); } else if (layout instanceof SerializedLayout) { final Destination content = new Destination(); content.byteBuffer.put(layout.getHeader()); layout.encode(event, content); content.getByteBuffer().flip(); final byte[] record = new byte[content.getByteBuffer().remaining()]; content.getByteBuffer().get(record); data.add(record); } else { final Destination content = new Destination(); layout.encode(event, content); content.getByteBuffer().flip(); final byte[] record = new byte[content.getByteBuffer().remaining()]; content.getByteBuffer().get(record); write(record); } }
protected void writeHeader(final Layout<?> layout, final OutputStream out) throws IOException { final byte[] header = layout.getHeader(); if (header != null) { out.write(header); } }
protected void setOutputStream(final OutputStream os) { final byte[] header = layout.getHeader(); if (header != null) { try { os.write(header, 0, header.length); this.outputStream = os; // only update field if os.write() succeeded } catch (final IOException ioe) { logError("Unable to write header", ioe); } } else { this.outputStream = os; } }
/** * Writes the layout's header to the file if it exists. */ private void writeHeader() { if (layout == null) { return; } final byte[] header = layout.getHeader(); if (header == null) { return; } try { if (randomAccessFile.length() == 0) { // write to the file, not to the buffer: the buffer may not be empty randomAccessFile.write(header, 0, header.length); } } catch (final IOException e) { logError("Unable to write header", e); } }
/** * @since 2.6 * @deprecated */ @Deprecated protected OutputStreamManager(final OutputStream os, final String streamName, final Layout<?> layout, final boolean writeHeader, final ByteBuffer byteBuffer) { super(null, streamName); this.outputStream = os; this.layout = layout; if (writeHeader && layout != null) { final byte[] header = layout.getHeader(); if (header != null) { try { getOutputStream().write(header, 0, header.length); } catch (final IOException e) { logError("Unable to write header", e); } } } this.byteBuffer = Objects.requireNonNull(byteBuffer, "byteBuffer"); }
@Override public DatagramSocketManager createManager(final String name, final FactoryData data) { InetAddress inetAddress; try { inetAddress = InetAddress.getByName(data.host); } catch (final UnknownHostException ex) { LOGGER.error("Could not find address of " + data.host, ex); return null; } final OutputStream os = new DatagramOutputStream(data.host, data.port, data.layout.getHeader(), data.layout.getFooter()); return new DatagramSocketManager(name, os, inetAddress, data.host, data.port, data.layout, data.bufferSize); } }
/** * @since 2.7 */ protected OutputStreamManager(final LoggerContext loggerContext, final OutputStream os, final String streamName, final boolean createOnDemand, final Layout<? extends Serializable> layout, final boolean writeHeader, final ByteBuffer byteBuffer) { super(loggerContext, streamName); if (createOnDemand && os != null) { LOGGER.error( "Invalid OutputStreamManager configuration for '{}': You cannot both set the OutputStream and request on-demand.", streamName); } this.layout = layout; this.byteBuffer = Objects.requireNonNull(byteBuffer, "byteBuffer"); this.outputStream = os; if (writeHeader && layout != null) { final byte[] header = layout.getHeader(); if (header != null) { try { getOutputStream().write(header, 0, header.length); } catch (final IOException e) { logError("Unable to write header for " + streamName, e); } } } }
private void tryAppend(final LogEvent event) throws ExecutionException, InterruptedException, TimeoutException { final Layout<? extends Serializable> layout = getLayout(); byte[] data; if (layout instanceof SerializedLayout) { final byte[] header = layout.getHeader(); final byte[] body = layout.toByteArray(event); data = new byte[header.length + body.length]; System.arraycopy(header, 0, data, 0, header.length); System.arraycopy(body, 0, data, header.length, body.length); } else { data = layout.toByteArray(event); } manager.send(data); }