/* Copyright 2012 Google, Inc. * * 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 org.arbeitspferde.groningen.utility.logstream; import java.io.IOException; import java.io.OutputStream; /** * {@link OutputLogStreamFactory} is responsible for provisioning {@link OutputLogStream} instances * for the user subject to the underlying storage and encoding methodology of the system at play. */ public interface OutputLogStreamFactory { /** * Create a {@link OutputLogStream} from a given stream. * @param stream The stream used for the storage. * @return The {@link OutputLogStream} used to encode the user data in the underlying format. * @throws IOException In case of an anomaly with the storage stack. */ public OutputLogStream forStream(final OutputStream stream) throws IOException; /** * This is similar to {@link OutputLogStreamFactory#forStream} except that it creates a new * target emission file from the {@link Specification} subject to a given log rotation * specification. * * @param specification The specification used to dictate where and when log files are created * and rotated. * @return The {@link OutputLogStream} used to encode the user data in the underlying format, * subject to a given rotation policy. * @throws IOException In case of an anomaly with the storage stack. */ public OutputLogStream rotatingStreamForSpecification(final Specification specification) throws IOException; /** * The storage and log rotation storage policy */ public static interface Specification { /** * The all members of the path leading up to the name should exist. * * @return The prefix for the emitted file's name. */ public String getFilenamePrefix(); /** * @return The port on which this given server is serving in case the underlying host * multi-homes other things. */ public int getServingPort(); /** * Logs may grow large; rotate them automatically. * * @return The size before which the log file will be automatically rotated. */ public long rotateFileUponAtSizeBytes(); } }