/* * Copyright (C) 2012 The Android Open Source Project * * 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. */ #ifndef CTSAUDIO_FILEUTIL_H #define CTSAUDIO_FILEUTIL_H #include <stdarg.h> #include <utils/String8.h> #include <utils/threads.h> #include <iostream> #include <fstream> /** * Class to write to file and stdout at the same time. * */ class FileUtil { public: /** * create log / report dir * @param dirPath returns path of created dir */ static bool prepare(android::String8& dirPath); protected: FileUtil(); virtual ~FileUtil(); /** * if fileName is NULL, only stdout output will be supproted */ virtual bool init(const char* fileName); virtual bool doPrintf(const char* fmt, ...); /// fileOnly log only to file /// loglevel 0 .., -1 means no log level. virtual bool doVprintf(bool fileOnly, int loglevel, const char *fmt, va_list ap); private: // store dirPath to prevent creating multiple times static android::String8 mDirPath; std::ofstream mFile; static const int DEFAULT_BUFFER_SIZE = 1024; // buffer for printf. one line longer than this will be truncated. char* mBuffer; int mBufferSize; android::Mutex mWriteLock; }; #endif // CTSAUDIO_FILEUTIL_H