xref: /developtools/hiperf/src/option_debug.cpp (revision 48f512ce)
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