All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.openhft.chronicle.logger.ChronicleLogWriters Maven / Gradle / Ivy

There is a newer version: 4.27ea0
Show newest version
/*
 * Copyright 2014 Higher Frequency Trading
 *
 * http://www.higherfrequencytrading.com
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.openhft.chronicle.logger;

import net.openhft.chronicle.Chronicle;
import net.openhft.chronicle.ExcerptAppender;
import net.openhft.chronicle.VanillaChronicle;
import net.openhft.lang.model.constraints.NotNull;

import java.io.Closeable;
import java.io.IOException;
import java.io.PrintStream;

public class ChronicleLogWriters {

    public interface ExcerptAppenderProvider {
        ExcerptAppender get();
    }

    // *************************************************************************
    //
    // *************************************************************************

    public static class IndexedExcerptAppenderProvider implements ExcerptAppenderProvider {
        private ExcerptAppender appender;

        public IndexedExcerptAppenderProvider(final @NotNull Chronicle chronicle) {
            try {
                this.appender = chronicle.createAppender();
            } catch (IOException e) {
                this.appender = null;

                e.printStackTrace();
            }
        }

        @Override
        public ExcerptAppender get() {
            return this.appender;
        }
    }

    public static class VanillaExcerptAppenderProvider implements ExcerptAppenderProvider {
        private final Chronicle chronicle;

        public VanillaExcerptAppenderProvider(final @NotNull Chronicle chronicle) {
            this.chronicle = chronicle;
        }

        @Override
        public ExcerptAppender get() {
            try {
                return this.chronicle.createAppender();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }
    }

    // *************************************************************************
    //
    // *************************************************************************

    public static abstract class AbstractChronicleLogWriter implements ChronicleLogWriter {

        private final ExcerptAppenderProvider appenderProvider;
        private final Chronicle chronicle;

        public AbstractChronicleLogWriter(@NotNull Chronicle chronicle) throws IOException {
            this.chronicle = chronicle;
            this.appenderProvider = (chronicle instanceof VanillaChronicle)
                ? new VanillaExcerptAppenderProvider(chronicle)
                : new IndexedExcerptAppenderProvider(chronicle);
        }

        @Override
        public Chronicle getChronicle() {
            return this.chronicle;
        }

        @Override
        public void close() throws IOException {
            if (this.chronicle != null) {
                this.chronicle.close();
            }
        }

        protected ExcerptAppender getAppender() {
            return this.appenderProvider.get();
        }
    }

    // *************************************************************************
    //
    // *************************************************************************

    public static final class BinaryWriter extends AbstractChronicleLogWriter {

        public BinaryWriter(@NotNull Chronicle chronicle) throws IOException {
            super(chronicle);
        }

        private void logCommon(
                final ExcerptAppender appender,
                final ChronicleLogLevel level,
                final long timestamp,
                final String threadName,
                final String loggerName,
                final String message) {
            appender.writeByte(ChronicleLog.VERSION);
            appender.writeLong(timestamp);
            level.writeTo(appender);
            appender.writeUTFΔ(threadName);
            appender.writeUTFΔ(loggerName);
            appender.writeUTFΔ(message);
        }

        @Override
        public void write(
            final ChronicleLogLevel level,
            final long timestamp,
            final String threadName,
            final String loggerName,
            final String message) {
            final ExcerptAppender appender = getAppender();
            if (appender != null) {
                appender.startExcerpt();
                logCommon(appender, level, timestamp, threadName, loggerName, message);
                appender.finish();
            }
        }

        @Override
        public void write(
            final ChronicleLogLevel level,
            final long timestamp,
            final String threadName,
            final String loggerName,
            final String message,
            final Throwable throwable) {
            final ExcerptAppender appender = getAppender();
            if (appender != null) {
                appender.startExcerpt();

                logCommon(appender, level, timestamp, threadName, loggerName, message);

                appender.writeStopBit(0);

                if(throwable != null) {
                    appender.writeBoolean(true);
                    appender.writeObject(throwable);

                } else {
                    appender.writeBoolean(false);
                }

                appender.finish();
            }
        }

        @Override
        public void write(
            final ChronicleLogLevel level,
            final long timestamp,
            final String threadName,
            final String loggerName,
            final String message,
            final Throwable throwable,
            final Object arg1) {
            final ExcerptAppender appender = getAppender();
            if (appender != null) {
                appender.startExcerpt();

                logCommon(appender, level, timestamp, threadName, loggerName, message);

                appender.writeStopBit(1);
                appender.writeObject(arg1);

                if(throwable != null) {
                    appender.writeBoolean(true);
                    appender.writeObject(throwable);

                } else {
                    appender.writeBoolean(false);
                }

                appender.finish();
            }
        }

        @Override
        public void write(
            final ChronicleLogLevel level,
            final long timestamp,
            final String threadName,
            final String loggerName,
            final String message,
            final Throwable throwable,
            final Object arg1,
            final Object arg2) {
            final ExcerptAppender appender = getAppender();
            if (appender != null) {
                appender.startExcerpt();

                logCommon(appender, level, timestamp, threadName, loggerName, message);

                appender.writeStopBit(2);
                appender.writeObject(arg1);
                appender.writeObject(arg2);

                if(throwable != null) {
                    appender.writeBoolean(true);
                    appender.writeObject(throwable);

                } else {
                    appender.writeBoolean(false);
                }

                appender.finish();
            }
        }

        @Override
        public void write(
            final ChronicleLogLevel level,
            final long timestamp,
            final String threadName,
            final String loggerName,
            final String message,
            final Throwable throwable,
            final Object[] args) {
            final ExcerptAppender appender = getAppender();
            if (appender != null) {
                appender.startExcerpt();

                logCommon(appender, level, timestamp, threadName, loggerName, message);

                if(args != null) {
                    appender.writeStopBit(args.length);
                    for(int i=0;i 




© 2015 - 2025 Weber Informatics LLC | Privacy Policy