d4e53781创建于 2023年6月29日历史提交
/* 
 * Copyright (c) Huawei Technologies Co., Ltd. 2022-2023. All rights reserved.
 * Licensed under the Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *     http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
 * PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

#include <syslog.h>
#include <stdbool.h>
#include <securec.h>
#include "tlogcat.h"
#include "sys_log_api.h"

static char g_logItemBuffer[LOG_ITEM_MAX_LEN];

void OpenTeeLog(void)
{
#ifdef DISABLE_LOG_CONS
    openlog(LOG_TEEOS_TAG, LOG_NDELAY, LOG_USER);
#else
    openlog(LOG_TEEOS_TAG, LOG_CONS | LOG_NDELAY, LOG_USER);
#endif
}

void CloseTeeLog(void)
{
    closelog();
}

static void TeeSyslogPrint(const struct LogItem *logItem, const char *logItemBuffer)
{
    uint8_t logLevel = logItem->logLevel;
    uint8_t syslogLevel[TOTAL_LEVEL_NUMS] = {LOG_ERR, LOG_WARNING, LOG_INFO, LOG_DEBUG, LOG_DEBUG, LOG_CRIT};

    if (logLevel < TOTAL_LEVEL_NUMS) {
        logLevel = syslogLevel[logLevel];
    } else {
        logLevel = LOG_INFO;
    }

    (void)syslog(LOG_USER | logLevel, "index: %u: %s", logItem->serialNo, logItemBuffer);
}

void LogWriteSysLog(const struct LogItem *logItem, bool isTa)
{
    (void)isTa;
    if (logItem == NULL || logItem->logRealLen == 0) {
        return;
    }
    if (memcpy_s(g_logItemBuffer, LOG_ITEM_MAX_LEN, logItem->logBuffer, logItem->logRealLen) == EOK) {
        g_logItemBuffer[logItem->logRealLen - 1] = '\0';
        TeeSyslogPrint(logItem, (const char*)g_logItemBuffer);
    }
}