1/* 2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "option_debug.h" 17#include "debug_logger.h" 18#include "option.h" 19namespace OHOS { 20namespace Developtools { 21namespace HiPerf { 22static bool OnVerboseLevel(const std::vector<std::string> &debugLevel) 23{ 24#if defined(is_ohos) && is_ohos 25 if (IsRoot()) { 26 if (debugLevel.size() == 0) { 27 return false; 28 } 29 DebugLogger::GetInstance()->SetLogLevel(LEVEL_VERBOSE); 30 DebugLogger::GetInstance()->Disable(false); 31 } 32#endif 33 return true; 34} 35 36static bool OnMuchLevel(const std::vector<std::string> &debugLevel) 37{ 38#if defined(is_ohos) && is_ohos 39 if (IsRoot()) { 40 if (debugLevel.size() == 0) { 41 return false; 42 } 43 DebugLogger::GetInstance()->SetLogLevel(LEVEL_MUCH); 44 DebugLogger::GetInstance()->Disable(false); 45 } 46#endif 47 return true; 48} 49 50static bool OnDebugLevel(const std::vector<std::string> &debugLevel) 51{ 52#if defined(is_ohos) && is_ohos 53 if (IsRoot()) { 54 if (debugLevel.size() == 0) { 55 return false; 56 } 57 DebugLogger::GetInstance()->SetLogLevel(LEVEL_DEBUG); 58 DebugLogger::GetInstance()->Disable(false); 59 } 60#endif 61 return true; 62} 63 64static bool OnNoDebug(const std::vector<std::string> &debugLevel) 65{ 66#if defined(is_ohos) && is_ohos 67 if (IsRoot()) { 68 if (debugLevel.size() == 0) { 69 return false; 70 } 71 DebugLogger::GetInstance()->Disable(); 72 } 73#endif 74 return true; 75} 76 77static bool OnMixLogOutput(const std::vector<std::string> &debugLevel) 78{ 79#if defined(is_ohos) && is_ohos 80 if (IsRoot()) { 81 if (debugLevel.size() == 0) { 82 return false; 83 } 84 DebugLogger::GetInstance()->SetMixLogOutput(true); 85 } 86#endif 87 return true; 88} 89 90static bool OnLogPath(std::vector<std::string> &args) 91{ 92#if defined(is_ohos) && is_ohos 93 if (IsRoot()) { 94 if (args.size() > 0) { 95 DebugLogger::GetInstance()->SetLogPath(args[0]); 96 args.erase(args.begin()); 97 } else { 98 return false; 99 } 100 } 101#endif 102 return true; 103} 104 105static bool OnLogTag(std::vector<std::string> &args) 106{ 107#if defined(is_ohos) && is_ohos 108 if (IsRoot()) { 109 if (args.size() > 0) { 110 DebugLogger::GetInstance()->SetLogTags(args[0]); 111 args.erase(args.begin()); 112 } else { 113 return false; 114 } 115 } 116#endif 117 return true; 118} 119#if is_ohos && !is_double_framework 120static bool OnHiLog(const std::vector<std::string> &args) 121{ 122 DebugLogger::GetInstance()->EnableHiLog(); 123 return true; 124} 125#endif 126void RegisterMainCommandDebug() 127{ 128 Option::RegisterMainOption("--nodebug", "disable debug log, usage format: --nodebug [command] [args]", 129 OnNoDebug); 130 Option::RegisterMainOption("--debug", "show debug log, usage format: --debug [command] [args]", 131 OnDebugLevel); 132 Option::RegisterMainOption("--verbose", "show debug log, usage format: --verbose [command] [args]", 133 OnVerboseLevel); 134 Option::RegisterMainOption("--much", "show extremely much debug log, usage format: --much [command] [args]", 135 OnMuchLevel); 136 Option::RegisterMainOption("--mixlog", "mix the log in output, usage format: --much [command] [args]", 137 OnMixLogOutput); 138 Option::RegisterMainOption("--logpath", 139 "log file name full path, usage format: --logpath [filepath] [command] [args]", 140 OnLogPath); 141 std::string tagUsage = StringPrintf("%s\t%-20s\t%s\t%-20s\t%s", 142 "enable log level for HILOG_TAG, usage format: --logtag <tag>[:level][,<tag>[:level]] [command] [args]\n", " ", 143 "tag: Dump, Report, Record, Stat... level: D, V, M...\n", " ", 144 "example: hiperf --verbose --logtag Record:D [command] [args]"); 145 Option::RegisterMainOption("--logtag", tagUsage.c_str(), OnLogTag); 146#if is_ohos && !is_double_framework 147 Option::RegisterMainOption("--hilog", "use hilog not file to record log", OnHiLog); 148#endif 149} 150} // namespace HiPerf 151} // namespace Developtools 152} // namespace OHOS 153