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