1/* 2** 3** Copyright 2015, The Android Open Source Project 4** 5** Licensed under the Apache License, Version 2.0 (the "License"); 6** you may not use this file except in compliance with the License. 7** You may obtain a copy of the License at 8** 9** http://www.apache.org/licenses/LICENSE-2.0 10** 11** Unless required by applicable law or agreed to in writing, software 12** distributed under the License is distributed on an "AS IS" BASIS, 13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14** See the License for the specific language governing permissions and 15** limitations under the License. 16*/ 17 18//#define LOG_NDEBUG 0 19#define LOG_TAG "ServiceLog" 20#include <utils/Log.h> 21 22#include <time.h> 23 24#include "ServiceLog.h" 25 26static const size_t kDefaultMaxNum = 100; 27 28namespace android { 29 30ServiceLog::ServiceLog() : mMaxNum(kDefaultMaxNum), mLogs(mMaxNum) {} 31ServiceLog::ServiceLog(size_t maxNum) : mMaxNum(maxNum), mLogs(mMaxNum) {} 32 33void ServiceLog::add(const String8 &log) { 34 Mutex::Autolock lock(mLock); 35 time_t now = time(0); 36 char buf[64]; 37 strftime(buf, sizeof(buf), "%m-%d %T", localtime(&now)); 38 mLogs.add(String8::format("%s %s", buf, log.string())); 39} 40 41String8 ServiceLog::toString(const char *linePrefix) const { 42 Mutex::Autolock lock(mLock); 43 String8 result; 44 for (const auto& log : mLogs) { 45 addLine(log.string(), linePrefix, &result); 46 } 47 if (mLogs.size() == mMaxNum) { 48 addLine("...", linePrefix, &result); 49 } else if (mLogs.size() == 0) { 50 addLine("[no events yet]", linePrefix, &result); 51 } 52 return result; 53} 54 55void ServiceLog::addLine(const char *log, const char *prefix, String8 *result) const { 56 if (prefix != NULL) { 57 result->append(prefix); 58 } 59 result->append(log); 60 result->append("\n"); 61} 62 63} // namespace android 64