• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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"
19 namespace OHOS {
20 namespace Developtools {
21 namespace HiPerf {
OnVerboseLevel(const std::vector<std::string> & debugLevel)22 static bool OnVerboseLevel(const std::vector<std::string> &debugLevel)
23 {
24     if (debugLevel.size() == 0) {
25         return false;
26     }
27     DebugLogger::GetInstance()->SetLogLevel(LEVEL_VERBOSE);
28     DebugLogger::GetInstance()->Disable(false);
29     return true;
30 }
31 
OnMuchLevel(const std::vector<std::string> & debugLevel)32 static bool OnMuchLevel(const std::vector<std::string> &debugLevel)
33 {
34     if (debugLevel.size() == 0) {
35         return false;
36     }
37     DebugLogger::GetInstance()->SetLogLevel(LEVEL_MUCH);
38     DebugLogger::GetInstance()->Disable(false);
39     return true;
40 }
41 
OnDebugLevel(const std::vector<std::string> & debugLevel)42 static bool OnDebugLevel(const std::vector<std::string> &debugLevel)
43 {
44     if (debugLevel.size() == 0) {
45         return false;
46     }
47     DebugLogger::GetInstance()->SetLogLevel(LEVEL_DEBUG);
48     DebugLogger::GetInstance()->Disable(false);
49     return true;
50 }
51 
OnNoDebug(const std::vector<std::string> & debugLevel)52 static bool OnNoDebug(const std::vector<std::string> &debugLevel)
53 {
54     if (debugLevel.size() == 0) {
55         return false;
56     }
57     DebugLogger::GetInstance()->Disable();
58     return true;
59 }
60 
OnMixLogOutput(const std::vector<std::string> & debugLevel)61 static bool OnMixLogOutput(const std::vector<std::string> &debugLevel)
62 {
63     if (debugLevel.size() == 0) {
64         return false;
65     }
66     DebugLogger::GetInstance()->SetMixLogOutput(true);
67     return true;
68 }
69 
OnLogPath(std::vector<std::string> & args)70 static bool OnLogPath(std::vector<std::string> &args)
71 {
72     if (args.size() > 0) {
73         DebugLogger::GetInstance()->SetLogPath(args[0]);
74         args.erase(args.begin());
75     } else {
76         return false;
77     }
78     return true;
79 }
80 
OnLogTag(std::vector<std::string> & args)81 static bool OnLogTag(std::vector<std::string> &args)
82 {
83     if (args.size() > 0) {
84         DebugLogger::GetInstance()->SetLogTags(args[0]);
85         args.erase(args.begin());
86     } else {
87         return false;
88     }
89     return true;
90 }
91 #if is_ohos && !is_double_framework
OnHiLog(const std::vector<std::string> & args)92 static bool OnHiLog(const std::vector<std::string> &args)
93 {
94     DebugLogger::GetInstance()->EnableHiLog();
95     return true;
96 }
97 #endif
RegisterMainCommandDebug()98 void RegisterMainCommandDebug()
99 {
100     Option::RegisterMainOption("--nodebug", "disable debug log, usage format: --nodebug [command] [args]",
101                                OnNoDebug);
102     Option::RegisterMainOption("--debug", "show debug log, usage format: --debug [command] [args]",
103                                OnDebugLevel);
104     Option::RegisterMainOption("--verbose", "show debug log, usage format: --verbose [command] [args]",
105                                OnVerboseLevel);
106     Option::RegisterMainOption("--much", "show extremely much debug log, usage format: --much [command] [args]",
107                                OnMuchLevel);
108     Option::RegisterMainOption("--mixlog", "mix the log in output, usage format: --much [command] [args]",
109                                OnMixLogOutput);
110     Option::RegisterMainOption("--logpath",
111                                "log file name full path, usage format: --logpath [filepath] [command] [args]",
112                                OnLogPath);
113     std::string tagUsage = StringPrintf("%s\t%-20s\t%s\t%-20s\t%s",
114         "enable log level for HILOG_TAG, usage format: --logtag <tag>[:level][,<tag>[:level]] [command] [args]\n", " ",
115         "tag: Dump, Report, Record, Stat... level: D, V, M...\n", " ",
116         "example: hiperf --verbose --logtag Record:D [command] [args]");
117     Option::RegisterMainOption("--logtag", tagUsage.c_str(), OnLogTag);
118 #if is_ohos && !is_double_framework
119     Option::RegisterMainOption("--hilog", "use hilog not file to record log", OnHiLog);
120 #endif
121 }
122 } // namespace HiPerf
123 } // namespace Developtools
124 } // namespace OHOS
125