1484543d1Sopenharmony_ci/* 2484543d1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3484543d1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4484543d1Sopenharmony_ci * you may not use this file except in compliance with the License. 5484543d1Sopenharmony_ci * You may obtain a copy of the License at 6484543d1Sopenharmony_ci * 7484543d1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8484543d1Sopenharmony_ci * 9484543d1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10484543d1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11484543d1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12484543d1Sopenharmony_ci * See the License for the specific language governing permissions and 13484543d1Sopenharmony_ci * limitations under the License. 14484543d1Sopenharmony_ci */ 15484543d1Sopenharmony_ci 16484543d1Sopenharmony_ci#include "dfx/log/log_base.h" 17484543d1Sopenharmony_ci#include <string> 18484543d1Sopenharmony_ci#include <cstdarg> 19484543d1Sopenharmony_ci#include <iostream> 20484543d1Sopenharmony_ci#include <securec.h> 21484543d1Sopenharmony_ci#include <chrono> 22484543d1Sopenharmony_ci#include "internal_inc/osal.h" 23484543d1Sopenharmony_ci 24484543d1Sopenharmony_cistatic const int g_logBufferSize = 2048; 25484543d1Sopenharmony_ci 26484543d1Sopenharmony_cistatic std::string GetCurrentTime(void) 27484543d1Sopenharmony_ci{ 28484543d1Sopenharmony_ci const int startYear = 1900; 29484543d1Sopenharmony_ci auto now = std::chrono::system_clock::now(); 30484543d1Sopenharmony_ci auto curMs = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()); 31484543d1Sopenharmony_ci auto sectime = std::chrono::duration_cast<std::chrono::seconds>(curMs); 32484543d1Sopenharmony_ci auto milltime = curMs % 1000; 33484543d1Sopenharmony_ci std::time_t timet = sectime.count(); 34484543d1Sopenharmony_ci struct tm curtime; 35484543d1Sopenharmony_ci localtime_r(&timet, &curtime); 36484543d1Sopenharmony_ci 37484543d1Sopenharmony_ci auto year = std::to_string(curtime.tm_year + startYear); 38484543d1Sopenharmony_ci auto mon = std::to_string(curtime.tm_mon + 1); 39484543d1Sopenharmony_ci auto day = std::to_string(curtime.tm_mday); 40484543d1Sopenharmony_ci auto hour = std::to_string(curtime.tm_hour); 41484543d1Sopenharmony_ci auto min = std::to_string(curtime.tm_min); 42484543d1Sopenharmony_ci auto sec = std::to_string(curtime.tm_sec); 43484543d1Sopenharmony_ci auto ms = std::to_string(milltime.count()); 44484543d1Sopenharmony_ci 45484543d1Sopenharmony_ci return year + "-" + mon + "-" + day + " " + hour + ":" + min + ":" + sec + "." + ms; 46484543d1Sopenharmony_ci} 47484543d1Sopenharmony_ci 48484543d1Sopenharmony_cistatic void LogOutput(const char* level, const char* log) 49484543d1Sopenharmony_ci{ 50484543d1Sopenharmony_ci std::string pid, tid, strBuf; 51484543d1Sopenharmony_ci pid = std::to_string(GetPid()); 52484543d1Sopenharmony_ci tid = std::to_string(syscall(SYS_gettid)); 53484543d1Sopenharmony_ci 54484543d1Sopenharmony_ci strBuf = GetCurrentTime() + " "; 55484543d1Sopenharmony_ci strBuf += pid + " " + tid + " "; 56484543d1Sopenharmony_ci strBuf += level; 57484543d1Sopenharmony_ci strBuf += " ffrt : "; 58484543d1Sopenharmony_ci strBuf += log; 59484543d1Sopenharmony_ci 60484543d1Sopenharmony_ci std::cout << strBuf; 61484543d1Sopenharmony_ci} 62484543d1Sopenharmony_ci 63484543d1Sopenharmony_civoid LogErr(const char* fmt, ...) 64484543d1Sopenharmony_ci{ 65484543d1Sopenharmony_ci char errLog[g_logBufferSize]; 66484543d1Sopenharmony_ci va_list arg; 67484543d1Sopenharmony_ci va_start(arg, fmt); 68484543d1Sopenharmony_ci int ret = vsnprintf_s(errLog, sizeof(errLog), sizeof(errLog) - 1, fmt, arg); 69484543d1Sopenharmony_ci va_end(arg); 70484543d1Sopenharmony_ci if (ret < 0) { 71484543d1Sopenharmony_ci return; 72484543d1Sopenharmony_ci } 73484543d1Sopenharmony_ci LogOutput("E", errLog); 74484543d1Sopenharmony_ci} 75484543d1Sopenharmony_ci 76484543d1Sopenharmony_civoid LogWarn(const char* fmt, ...) 77484543d1Sopenharmony_ci{ 78484543d1Sopenharmony_ci char warnLog[g_logBufferSize]; 79484543d1Sopenharmony_ci va_list arg; 80484543d1Sopenharmony_ci va_start(arg, fmt); 81484543d1Sopenharmony_ci int ret = vsnprintf_s(warnLog, sizeof(warnLog), sizeof(warnLog) - 1, fmt, arg); 82484543d1Sopenharmony_ci va_end(arg); 83484543d1Sopenharmony_ci if (ret < 0) { 84484543d1Sopenharmony_ci return; 85484543d1Sopenharmony_ci } 86484543d1Sopenharmony_ci LogOutput("W", warnLog); 87484543d1Sopenharmony_ci} 88484543d1Sopenharmony_ci 89484543d1Sopenharmony_civoid LogInfo(const char* fmt, ...) 90484543d1Sopenharmony_ci{ 91484543d1Sopenharmony_ci char infoLog[g_logBufferSize]; 92484543d1Sopenharmony_ci va_list arg; 93484543d1Sopenharmony_ci va_start(arg, fmt); 94484543d1Sopenharmony_ci int ret = vsnprintf_s(infoLog, sizeof(infoLog), sizeof(infoLog) - 1, fmt, arg); 95484543d1Sopenharmony_ci va_end(arg); 96484543d1Sopenharmony_ci if (ret < 0) { 97484543d1Sopenharmony_ci return; 98484543d1Sopenharmony_ci } 99484543d1Sopenharmony_ci LogOutput("I", infoLog); 100484543d1Sopenharmony_ci} 101484543d1Sopenharmony_ci 102484543d1Sopenharmony_civoid LogDebug(const char* fmt, ...) 103484543d1Sopenharmony_ci{ 104484543d1Sopenharmony_ci char debugLog[g_logBufferSize]; 105484543d1Sopenharmony_ci va_list arg; 106484543d1Sopenharmony_ci va_start(arg, fmt); 107484543d1Sopenharmony_ci int ret = vsnprintf_s(debugLog, sizeof(debugLog), sizeof(debugLog) - 1, fmt, arg); 108484543d1Sopenharmony_ci va_end(arg); 109484543d1Sopenharmony_ci if (ret < 0) { 110484543d1Sopenharmony_ci return; 111484543d1Sopenharmony_ci } 112484543d1Sopenharmony_ci LogOutput("D", debugLog); 113484543d1Sopenharmony_ci}