提交 14b0b2d0 编写于 作者: Z zhong_ning

enable log to kmsg

Signed-off-by: Nzhong_ning <zhong_ning@hoperun.com>
上级 c5789272
......@@ -28,9 +28,10 @@ extern "C" {
#define DEV_RANDOM_MINOR 8
#define DEV_URANDOM_MINOR 9
void MountBasicFs();
void CreateDeviceNode();
void MountBasicFs(void);
void CreateDeviceNode(void);
int MakeSocketDir(const char *path, mode_t mode);
void CloseStdio(void);
#ifdef __cplusplus
#if __cplusplus
......
......@@ -16,20 +16,19 @@
#include "init_log.h"
#include <errno.h>
#include <fcntl.h>
#ifdef OHOS_LITE
#include "hilog/log.h"
#endif
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <time.h>
#include <unistd.h>
#include "securec.h"
#define UNUSED(x) (void)(x)
#define MAX_FORMAT_SIZE 2048
#define MAX_LOG_SIZE 2048
#define UNUSED(x) \
do { \
(void)(x) \
} while (0)
#define MAX_LOG_SIZE 1024
#define BASE_YEAR 1900
#define UNLIKELY(x) __builtin_expect(!!(x), 0)
static InitLogLevel g_logLevel = INIT_INFO;
static const char *LOG_LEVEL_STR[] = { "DEBUG", "INFO", "WARNING", "ERROR", "FATAL" };
......@@ -47,63 +46,83 @@ void SetHiLogLevel(LogLevel logLevel)
g_hiLogLevel = logLevel;
}
void InitToHiLog(const char *tag, LogLevel logLevel, const char *fmt, ...)
void InitToHiLog(LogLevel logLevel, const char *fmt, ...)
{
if (logLevel < g_hiLogLevel) {
return;
}
if (tag == NULL) {
tag = "Init";
}
va_list list;
va_start(list, fmt);
char tmpFmt[MAX_FORMAT_SIZE];
if (vsnprintf_s(tmpFmt, MAX_FORMAT_SIZE, MAX_FORMAT_SIZE - 1, fmt, list) == -1) {
char tmpFmt[MAX_LOG_SIZE];
if (vsnprintf_s(tmpFmt, MAX_LOG_SIZE, MAX_LOG_SIZE - 1, fmt, list) == -1) {
va_end(list);
return;
}
(void)HiLogPrint(LOG_CORE, logLevel, LOG_DOMAIN, tag, "%{public}s", tmpFmt);
(void)HiLogPrint(LOG_CORE, logLevel, LOG_DOMAIN, INIT_LOG_TAG, "%{public}s", tmpFmt);
va_end(list);
return;
}
#endif
void InitLog(const char *tag, InitLogLevel logLevel, const char *fileName, int line, const char *fmt, ...)
static int g_fd = -1;
void OpenLogDevice(void)
{
if (logLevel < g_logLevel) {
return;
int fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC, S_IRUSR | S_IWUSR | S_IRGRP | S_IRGRP);
if (fd >= 0) {
g_fd = fd;
}
if (tag == NULL) {
return;
}
void EnableDevKmsg(void)
{
/* printk_devkmsg default value is ratelimit, We need to set "on" and remove the restrictions */
int fd = open("/proc/sys/kernel/printk_devkmsg", O_WRONLY | O_CLOEXEC, S_IRUSR | S_IWUSR | S_IRGRP | S_IRGRP);
if (fd < 0) {
return;
}
time_t second = time(0);
struct tm *t = localtime(&second);
if (t == NULL) {
printf("time is NULL.\n");
char *kmsgStatus = "on";
write(fd, kmsgStatus, strlen(kmsgStatus) + 1);
close(fd);
fd = -1;
return;
}
void InitLog(InitLogLevel logLevel, const char *fileName, int line, const char *kLevel,
const char *fmt, ...)
{
if (logLevel < g_logLevel) {
return;
}
fprintf(stdout, "[%d-%d-%d %d:%d:%d][pid=%d][%s:%d][%s][%s] ",
(t->tm_year + BASE_YEAR), (t->tm_mon + 1), t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec,
getpid(), fileName, line, tag, LOG_LEVEL_STR[logLevel]);
va_list list;
va_start(list, fmt);
vfprintf(stdout, fmt, list);
va_end(list);
fflush(stdout);
#if 0
int fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC | O_APPEND );
if (fd < 1) {
printf("xxxxxxxxxxxxxxx open failed. %d\n", errno);
if (UNLIKELY(g_fd < 0)) {
OpenLogDevice();
if (g_fd < 0) {
return;
}
}
va_list vargs;
va_start(vargs, fmt);
char tmpFmt[MAX_LOG_SIZE];
if (vsnprintf_s(tmpFmt, MAX_LOG_SIZE, MAX_LOG_SIZE - 1, fmt, vargs) == -1) {
close(g_fd);
g_fd = -1;
return;
}
if (write(fd, logInfo, strlen(logInfo)) < -1) {
printf("xxxxxxxxxxxxxxx write failed.%d\n", errno);
close(fd);
char logInfo[MAX_LOG_SIZE];
if (snprintf_s(logInfo, MAX_LOG_SIZE, MAX_LOG_SIZE - 1, "%s[pid=%d][%s:%d][%s][%s] %s",
kLevel, getpid(), fileName, line, INIT_LOG_TAG, LOG_LEVEL_STR[logLevel], tmpFmt) == -1) {
close(g_fd);
g_fd = -1;
return;
}
close(fd);
#endif
}
va_end(vargs);
if (write(g_fd, logInfo, strlen(logInfo)) < 0) {
close(g_fd);
g_fd = -1;
}
return;
}
......@@ -34,6 +34,10 @@ typedef enum InitLogLevel {
INIT_FATAL
} InitLogLevel;
#ifdef LABEL
#define INIT_LOG_TAG LABEL
#endif
#ifndef INIT_LOG_TAG
#define INIT_LOG_TAG "Init"
#endif
......@@ -42,58 +46,76 @@ typedef enum InitLogLevel {
#include "hilog/log.h"
#undef LOG_DOMAIN
#define LOG_DOMAIN 0xD000719
#define LOG_DOMAIN 0xD000719
#define INIT_LOGD(fmt, ...) InitToHiLog(INIT_LOG_TAG, LOG_DEBUG, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGI(fmt, ...) InitToHiLog(INIT_LOG_TAG, LOG_INFO, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGW(fmt, ...) InitToHiLog(INIT_LOG_TAG, LOG_WARN, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGE(fmt, ...) InitToHiLog(INIT_LOG_TAG, LOG_ERROR, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGF(fmt, ...) InitToHiLog(INIT_LOG_TAG, LOG_FATAL, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGD(fmt, ...) InitToHiLog(LOG_DEBUG, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGI(fmt, ...) InitToHiLog(LOG_INFO, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGW(fmt, ...) InitToHiLog(LOG_WARN, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGE(fmt, ...) InitToHiLog(LOG_ERROR, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define INIT_LOGF(fmt, ...) InitToHiLog(LOG_FATAL, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define STARTUP_LOGD(LABEL, fmt, ...) InitToHiLog(LABEL, LOG_DEBUG, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define STARTUP_LOGI(LABEL, fmt, ...) InitToHiLog(LABEL, LOG_INFO, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
#define STARTUP_LOGE(LABEL, fmt, ...) InitToHiLog(LABEL, LOG_ERROR, "%s : "fmt, (__FUNCTION__), ##__VA_ARGS__)
void InitToHiLog(const char *tag, LogLevel logLevel, const char *fmt, ...);
void InitToHiLog(LogLevel logLevel, const char *fmt, ...);
void SetHiLogLevel(LogLevel logLevel);
#else
#define __FILE_NAME__ (strrchr((__FILE__), '/') ? strrchr((__FILE__), '/') + 1 : (__FILE__))
#define INIT_LOGD(fmt, ...) InitLog(INIT_LOG_TAG, INIT_DEBUG, (__FILE_NAME__), (__LINE__), fmt"\n", ##__VA_ARGS__)
#define INIT_LOGI(fmt, ...) InitLog(INIT_LOG_TAG, INIT_INFO, (__FILE_NAME__), (__LINE__), fmt"\n", ##__VA_ARGS__)
#define INIT_LOGW(fmt, ...) InitLog(INIT_LOG_TAG, INIT_WARN, (__FILE_NAME__), (__LINE__), fmt"\n", ##__VA_ARGS__)
#define INIT_LOGE(fmt, ...) InitLog(INIT_LOG_TAG, INIT_ERROR, (__FILE_NAME__), (__LINE__), fmt"\n", ##__VA_ARGS__)
#define INIT_LOGF(fmt, ...) InitLog(INIT_LOG_TAG, INIT_FATAL, (__FILE_NAME__), (__LINE__), fmt"\n", ##__VA_ARGS__)
#define STARTUP_LOGD(LABEL, fmt, ...) InitLog(LABEL, INIT_DEBUG, (__FILE_NAME__), (__LINE__), fmt "\n", ##__VA_ARGS__)
#define STARTUP_LOGI(LABEL, fmt, ...) InitLog(LABEL, INIT_INFO, (__FILE_NAME__), (__LINE__), fmt "\n", ##__VA_ARGS__)
#define STARTUP_LOGE(LABEL, fmt, ...) InitLog(LABEL, INIT_ERROR, (__FILE_NAME__), (__LINE__), fmt "\n", ##__VA_ARGS__)
void InitLog(const char *tag, InitLogLevel logLevel, const char *fileName, int line, const char *fmt, ...);
#define FILE_NAME (strrchr((__FILE__), '/') ? strrchr((__FILE__), '/') + 1 : (__FILE__))
#define INIT_LOGD(fmt, ...) InitLog(INIT_DEBUG, (FILE_NAME), (__LINE__), "<7>", fmt"\n", ##__VA_ARGS__)
#define INIT_LOGI(fmt, ...) InitLog(INIT_INFO, (FILE_NAME), (__LINE__), "<6>", fmt"\n", ##__VA_ARGS__)
#define INIT_LOGW(fmt, ...) InitLog(INIT_WARN, (FILE_NAME), (__LINE__), "<4>", fmt"\n", ##__VA_ARGS__)
#define INIT_LOGE(fmt, ...) InitLog(INIT_ERROR, (FILE_NAME), (__LINE__), "<3>", fmt"\n", ##__VA_ARGS__)
#define INIT_LOGF(fmt, ...) InitLog(INIT_FATAL, (FILE_NAME), (__LINE__), "<3>", fmt"\n", ##__VA_ARGS__)
#define STARTUP_LOGD(LABEL, fmt, ...) InitLog(INIT_DEBUG, (FILE_NAME), (__LINE__), "<7>", fmt "\n", ##__VA_ARGS__)
#define STARTUP_LOGI(LABEL, fmt, ...) InitLog(INIT_INFO, (FILE_NAME), (__LINE__), "<6>", fmt "\n", ##__VA_ARGS__)
#define STARTUP_LOGE(LABEL, fmt, ...) InitLog(INIT_ERROR, (FILE_NAME), (__LINE__), "<3>", fmt "\n", ##__VA_ARGS__)
void InitLog(InitLogLevel logLevel, const char *fileName, int line, const char *kLevel, const char *fmt, ...);
void SetLogLevel(InitLogLevel logLevel);
void OpenLogDevice(void);
void EnableDevKmsg(void);
#endif
#define INIT_ERROR_CHECK(ret, statement, format, ...) \
if (!(ret)) { \
INIT_LOGE(format, ##__VA_ARGS__); \
statement; \
}
#define INIT_CHECK(ret, statement) \
if (!(ret)) { \
statement; \
}
#define INIT_CHECK_RETURN_VALUE(ret, result) \
if (!(ret)) { \
return result; \
}
#define INIT_CHECK_ONLY_RETURN(ret) \
if (!(ret)) { \
return; \
}
#define INIT_ERROR_CHECK(ret, statement, format, ...) \
do { \
if (!(ret)) { \
INIT_LOGE(format, ##__VA_ARGS__); \
statement; \
} \
} while (0)
#define INIT_INFO_CHECK(ret, statement, format, ...) \
do { \
if (!(ret)) { \
INIT_LOGI(format, ##__VA_ARGS__); \
statement; \
} \
} while (0)
#define INIT_CHECK(ret, statement) \
do { \
if (!(ret)) { \
statement; \
} \
} while (0)
#define INIT_CHECK_RETURN_VALUE(ret, result) \
do { \
if (!(ret)) { \
return result; \
} \
} while (0)
#define INIT_CHECK_ONLY_RETURN(ret) \
do { \
if (!(ret)) { \
return; \
} \
} while (0)
#ifdef __cplusplus
#if __cplusplus
......
......@@ -15,45 +15,52 @@
#include "device.h"
#include <errno.h>
#include <fcntl.h>
#include <linux/major.h>
#include <stdio.h>
#include <string.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#include <unistd.h>
#include "init_log.h"
#define DEFAULT_RW_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
#define DEFAULT_NO_AUTHORITY_MODE (S_IWUSR | S_IRUSR)
#define STDERR_HANDLE 2
void MountBasicFs()
void CloseStdio(void)
{
int fd = open("/dev/null", O_RDWR | O_CLOEXEC);
if (fd < 0) {
return;
}
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, STDERR_HANDLE);
close(fd);
}
void MountBasicFs(void)
{
if (mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755") != 0) {
INIT_LOGE("Mount tmpfs failed. %s", strerror(errno));
}
#ifndef __LITEOS__
if (mkdir("/dev/pts", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) != 0) {
INIT_LOGE("mkdir /dev/pts failed. %s", strerror(errno));
}
if (mount("devpts", "/dev/pts", "devpts", 0, NULL) != 0) {
INIT_LOGE("Mount devpts failed. %s", strerror(errno));
}
#endif
if (mount("proc", "/proc", "proc", 0, "hidepid=2") != 0) {
INIT_LOGE("Mount procfs failed. %s", strerror(errno));
}
if (mount("sysfs", "/sys", "sysfs", 0, NULL) != 0) {
INIT_LOGE("Mount sysfs failed. %s", strerror(errno));
}
#ifndef __LITEOS__
if (mount("selinuxfs", "/sys/fs/selinux", "selinuxfs", 0, NULL) != 0) {
INIT_LOGE("Mount selinuxfs failed. %s", strerror(errno));
}
#endif
}
void CreateDeviceNode()
void CreateDeviceNode(void)
{
if (mknod("/dev/kmsg", S_IFCHR | DEFAULT_NO_AUTHORITY_MODE, makedev(MEM_MAJOR, DEV_KMSG_MINOR)) != 0) {
INIT_LOGE("Create /dev/kmsg device node failed. %s", strerror(errno));
......
......@@ -63,13 +63,16 @@ static long TimeDiffMs(const struct timespec* tmBefore, const struct timespec* t
}
#endif // OHOS_DEBUG
int main(int argc, char * const argv[])
int main(int argc, char **argv)
{
#ifndef OHOS_LITE
if(setenv("UV_THREADPOOL_SIZE", "1", 1) != 0) {
INIT_LOGE("set UV_THREADPOOL_SIZE error : %d.", errno);
}
CloseStdio();
OpenLogDevice();
#endif
#ifdef OHOS_DEBUG
struct timespec tmEnter;
......@@ -90,6 +93,7 @@ int main(int argc, char * const argv[])
// 2. Mount basic filesystem and create common device node.
MountBasicFs();
CreateDeviceNode();
EnableDevKmsg();
MakeSocketDir("/dev/unix/socket/", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
#endif
......
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Copyright (c) 2021 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
......
......@@ -284,7 +284,7 @@ static const char *GetDeviceName(char *sysPath, const char *deviceName)
}
}
} else {
// kernel does not report DEVNAME, which is possible. use base name is syspath instead.
// kernel does not report DEVNAME, which is possible. use base name of syspath instead.
devName = basename(sysPath);
}
return devName;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册