/* * 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. */ #include <stdio.h> #include <stdarg.h> #include "StringUtil.h" #include "Log.h" Log* Log::mInstance = NULL; #define ASSERT_PLAIN(cond) if(!(cond)) { fprintf(stderr, \ "assertion failed %s %d", __FILE__, __LINE__); \ *(char*)0 = 0; /* this will crash */}; Log* Log::Instance(const char* dirName) { if (!mInstance) { mInstance = new Log(); ASSERT_PLAIN(mInstance->init(dirName)); } return mInstance; } void Log::Finalize() { delete mInstance; mInstance = NULL; } void Log::printf(LogLevel level, const char* fmt, ...) { va_list ap; va_start(ap, fmt); FileUtil::doVprintf(level < mLogLevel, level, fmt, ap); va_end(ap); } void Log::setLogLevel(LogLevel level) { mLogLevel = level; } Log::Log() : mLogLevel(ELogV) { ::fprintf(stderr, "Log level %d\n", mLogLevel); } Log::~Log() { } bool Log::init(const char* dirName) { if (dirName == NULL) { return true; } android::String8 logFile; if (logFile.appendFormat("%s/log.txt", dirName) != 0) { return false; } return FileUtil::init(logFile.string()); }