1/*
2 * Copyright (c) 2024-2024 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#ifndef SIGNATURETOOLS_SIGNATRUE_TOOLS_LOG_H
16#define SIGNATURETOOLS_SIGNATRUE_TOOLS_LOG_H
17#include <stdio.h>
18#include <iostream>
19#include <time.h>
20#include <chrono>
21#include <ctime>
22#include <iomanip>
23#include <sstream>
24
25#include "signature_tools_errno.h"
26
27namespace OHOS {
28namespace SignatureTools {
29
30static const char POINT = '.';
31static const char PLACEHOLDER = '0';
32static const int PLACEHOLDERLEN = 3;
33static const int SCALE = 1000;
34
35#define SIGNATURE_LOG(level, fmt, ...) \
36    printf("[%s] [%s] [%s] [%d] " fmt "\n", level, __FILE_NAME__, __FUNCTION__, __LINE__, ##__VA_ARGS__) \
37
38#ifdef SIGNATURE_LOG_DEBUG
39#define SIGNATURE_TOOLS_LOGI(fmt, ...) SIGNATURE_LOG("Info", fmt, ##__VA_ARGS__)
40#define SIGNATURE_TOOLS_LOGD(fmt, ...) SIGNATURE_LOG("Debug", fmt, ##__VA_ARGS__)
41#define SIGNATURE_TOOLS_LOGW(fmt, ...) SIGNATURE_LOG("Warn", fmt, ##__VA_ARGS__)
42#else
43#define SIGNATURE_TOOLS_LOGI(fmt, ...)
44#define SIGNATURE_TOOLS_LOGD(fmt, ...)
45#define SIGNATURE_TOOLS_LOGW(fmt, ...)
46#endif
47
48#define SIGNATURE_TOOLS_LOGF(fmt, ...) SIGNATURE_LOG("Fatal", fmt, ##__VA_ARGS__)
49#define SIGNATURE_TOOLS_LOGE(fmt, ...) SIGNATURE_LOG("Error", fmt, ##__VA_ARGS__)
50
51inline std::string GetSystemTime()
52{
53    std::string timeBuffer;
54    std::stringstream ss;
55    auto now = std::chrono::system_clock::now();
56    std::time_t nowTime = std::chrono::system_clock::to_time_t(now);
57    std::tm* localTime = std::localtime(&nowTime);
58    auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % SCALE;
59    ss << std::put_time(localTime, "%m-%d %H:%M:%S");
60    ss << POINT << std::setfill(PLACEHOLDER) << std::setw(PLACEHOLDERLEN) << ms.count();
61    timeBuffer = ss.str();
62    return timeBuffer;
63}
64
65/*
66* Function: Print the error code and error message to the terminal.
67* Parametric Description: command, code, details
68* command: Error code variable name as a string.
69* code: Error code.
70* details: Error description information.
71**/
72inline void PrintErrorNumberMsg(const std::string& command, const int code, const std::string& details)
73{
74    std::cerr << GetSystemTime() << " ERROR - " << command << ", code: "
75        << code << ". Details: " << details << std::endl;
76}
77
78/*
79* Function: Print a prompt to the terminal.
80* Parametric Description: message
81* message: Prompt Description Information.
82**/
83inline void PrintMsg(const std::string& message)
84{
85    std::cout << GetSystemTime() << " INFO  - " << message << std::endl;
86}
87} // namespace SignatureTools
88} // namespace OHOS
89#endif // SIGNATURETOOLS_SIGNATRUE_TOOLS_LOG_H