15d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn/*
25d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project
35d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn *
45d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
55d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * you may not use this file except in compliance with the License.
65d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * You may obtain a copy of the License at
75d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn *
85d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
95d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn *
105d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
115d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
125d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * See the License for the specific language governing permissions and
145d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * limitations under the License.
155d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn */
165d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
175d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackbornpackage android.util;
185d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
195d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackbornimport java.io.Writer;
205d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
215d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn/** @hide */
225d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackbornpublic class LogWriter extends Writer {
235d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    private final int mPriority;
245d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    private final String mTag;
255d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    private final int mBuffer;
265d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    private StringBuilder mBuilder = new StringBuilder(128);
275d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
285d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    /**
295d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * Create a new Writer that sends to the log with the given priority
305d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * and tag.
315d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     *
325d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * @param priority The desired log priority:
335d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * {@link android.util.Log#VERBOSE Log.VERBOSE},
345d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * {@link android.util.Log#DEBUG Log.DEBUG},
355d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * {@link android.util.Log#INFO Log.INFO},
365d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * {@link android.util.Log#WARN Log.WARN}, or
375d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * {@link android.util.Log#ERROR Log.ERROR}.
385d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * @param tag A string tag to associate with each printed log statement.
395d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     */
405d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    public LogWriter(int priority, String tag) {
415d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        mPriority = priority;
425d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        mTag = tag;
435d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        mBuffer = Log.LOG_ID_MAIN;
445d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    }
455d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
465d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    /**
475d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * @hide
485d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     * Same as above, but buffer is one of the LOG_ID_ constants from android.util.Log.
495d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn     */
505d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    public LogWriter(int priority, String tag, int buffer) {
515d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        mPriority = priority;
525d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        mTag = tag;
535d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        mBuffer = buffer;
545d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    }
555d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
565d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    @Override public void close() {
575d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        flushBuilder();
585d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    }
595d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
605d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    @Override public void flush() {
615d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        flushBuilder();
625d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    }
635d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
645d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    @Override public void write(char[] buf, int offset, int count) {
655d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        for(int i = 0; i < count; i++) {
665d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn            char c = buf[offset + i];
675d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn            if ( c == '\n') {
685d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn                flushBuilder();
695d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn            }
705d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn            else {
715d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn                mBuilder.append(c);
725d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn            }
735d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        }
745d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    }
755d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn
765d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    private void flushBuilder() {
775d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        if (mBuilder.length() > 0) {
785d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn            Log.println_native(mBuffer, mPriority, mTag, mBuilder.toString());
795d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn            mBuilder.delete(0, mBuilder.length());
805d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn        }
815d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn    }
825d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn}
83