* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* 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 FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
#include "slogd_main.h"
#include "log_pm_sig.h"
#include "slogd_argv.h"
#include "log_system_api.h"
#include "log_common.h"
#include "log_pm.h"
#include "slogd_service.h"
#include "log_print.h"
#include "slogd_trace_server.h"
STATIC INLINE void SlogdSignalInit(void)
{
LogSignalRecord(SIGTERM);
LogSignalRecord(SIGINT);
LogSignalIgn(SIGHUP);
LogSignalIgn(SIGPIPE);
}
STATIC LogStatus SlogdServiceInit(int32_t devId, int32_t level, bool isDocker)
{
LogStatus ret = LogServiceInit(devId, level, isDocker);
ONE_ACT_ERR_LOG(ret != LOG_SUCCESS, return LOG_FAILURE, "init log service failed and quit slogd process.");
SlogdSignalInit();
ret = LogPmStart(SLOGD_MONITOR_FLAG, isDocker);
TWO_ACT_ERR_LOG(ret != LOG_SUCCESS, LogServiceExit(),
return LOG_FAILURE, "log monitor start failed and quit slogd process.");
return LOG_SUCCESS;
}
STATIC void SlogdServiceProcess(int32_t devId)
{
LogServiceProcess(devId);
}
STATIC void SlogdServiceExit(void)
{
LogPmStop();
LogServiceExit();
}
* @brief : main function
* @param [in] : int argc cmdline param
* @param [in] : char *argv[] cmdline param
* @return : ==0: sucess; !=0: failures
*/
int32_t MAIN(int32_t argc, char **argv)
{
SELF_LOG_INFO("slogd process init");
struct SlogdOptions opt = { 0, 0, -1, false };
LogStatus ret = SlogdInitArgs(argc, argv, &opt);
ONE_ACT_NO_LOG(ret != LOG_SUCCESS, return LOG_FAILURE);
ret = SlogdServiceInit(opt.v, opt.l, opt.d);
ONE_ACT_NO_LOG(ret != LOG_SUCCESS, return LOG_FAILURE);
LogTraceServiceInit(opt.v);
ret = LogTraceServiceProcess();
if (ret != LOG_SUCCESS) {
SELF_LOG_ERROR("slogd process init trace service failed, ret = %d", ret);
LogTraceServiceExit();
SlogdServiceExit();
return LOG_FAILURE;
}
SELF_LOG_INFO("slogd process start, devId=%d", opt.v);
SlogdServiceProcess(opt.v);
SELF_LOG_ERROR("slogd process quit, signal=%d.", LogGetSigNo());
LogTraceServiceExit();
SlogdServiceExit();
return LOG_SUCCESS;
}