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 "platform/common/rs_log.h"
17
18 #include <cstdarg>
19 #include <cstdio>
20 #include <securec.h>
21 #include <hilog/log.h>
22 #ifdef NOT_BUILD_FOR_OHOS_SDK
23 #include <parameters.h>
24 #endif
25
26 namespace OHOS {
27 namespace Rosen {
28 namespace {
GenerateLabel(RSLog::Tag tag)29 inline const OHOS::HiviewDFX::HiLogLabel& GenerateLabel(RSLog::Tag tag)
30 {
31 return (tag == RSLog::Tag::RS) ? LABEL_RS : LABEL_ROSEN;
32 }
33 }
34
RSLogOutput(RSLog::Tag tag,RSLog::Level level,const char * format,...)35 void RSLogOutput(RSLog::Tag tag, RSLog::Level level, const char* format, ...)
36 {
37 va_list args;
38 va_start(args, format);
39 switch (level) {
40 case RSLog::LEVEL_INFO:
41 OHOS::HiviewDFX::HiLog::Info(GenerateLabel(tag), format, args);
42 break;
43 #ifndef ROSEN_DISABLE_DEBUGLOG
44 case RSLog::LEVEL_DEBUG:
45 OHOS::HiviewDFX::HiLog::Debug(GenerateLabel(tag), format, args);
46 break;
47 #endif
48 case RSLog::LEVEL_WARN:
49 OHOS::HiviewDFX::HiLog::Warn(GenerateLabel(tag), format, args);
50 break;
51 case RSLog::LEVEL_ERROR:
52 OHOS::HiviewDFX::HiLog::Error(GenerateLabel(tag), format, args);
53 break;
54 case RSLog::LEVEL_FATAL:
55 OHOS::HiviewDFX::HiLog::Fatal(GenerateLabel(tag), format, args);
56 break;
57 default:
58 break;
59 }
60 va_end(args);
61 }
62
RSLogManager()63 RSLogManager::RSLogManager()
64 {
65 #ifdef NOT_BUILD_FOR_OHOS_SDK
66 std::string flag = OHOS::system::GetParameter(DEBUG_GRAPHIC_LOG_FLAG, "0X0");
67 if (IsFlagValid(flag)) {
68 logFlag_ = static_cast<uint32_t>(std::stoul(flag.substr(INPUT_FLAG_MIN_LENGTH), nullptr, NUMERICAL_BASE));
69 RS_LOGI("RSLogManager init log flag: 0x%{public}X(%{public}u)", logFlag_, logFlag_);
70 }
71 #endif
72 }
73
GetInstance()74 RSLogManager& RSLogManager::GetInstance()
75 {
76 static RSLogManager rsLogManager;
77 return rsLogManager;
78 }
79
SetRSLogFlag(std::string & flag)80 bool RSLogManager::SetRSLogFlag(std::string& flag)
81 {
82 if (IsFlagValid(flag)) {
83 #ifdef NOT_BUILD_FOR_OHOS_SDK
84 OHOS::system::SetParameter(DEBUG_GRAPHIC_LOG_FLAG, flag);
85 #endif
86 logFlag_ = static_cast<uint32_t>(std::stoul(flag.substr(INPUT_FLAG_MIN_LENGTH), nullptr, NUMERICAL_BASE));
87 RS_LOGI("RSLogManager set log flag: 0x%{public}X(%{public}u)", logFlag_, logFlag_);
88 return true;
89 }
90 return false;
91 }
92
IsFlagValid(std::string & flag)93 bool RSLogManager::IsFlagValid(std::string& flag)
94 {
95 if ((flag.length() > INPUT_FLAG_MIN_LENGTH) && (flag.length() <= INPUT_FLAG_MAX_LENGTH)
96 && (flag.substr(0, INPUT_FLAG_MIN_LENGTH) == "0x" || flag.substr(0, INPUT_FLAG_MIN_LENGTH) == "0X")) {
97 return true;
98 }
99 return false;
100 }
101
102 } // namespace Rosen
103 } // namespace OHOS
104