
net.openhft.chronicle.logger.ChronicleLogWriters Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of chronicle-logger Show documentation
Show all versions of chronicle-logger Show documentation
OpenHFT :: High Performance Logging
/*
* 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