secgateway/Platform/modules/klog_api/api/klog_api.c

89 lines
1.8 KiB
C
Raw Normal View History

#include "klog_api.h"
#include <linux/slab.h>
#include <linux/module.h>
#define LOG_MSG_SZ 1024
#define MODULE_FMT "[%s]"
klog_t *g_klog = NULL;
klog_t *klog_init(const char *module_name)
{
klog_t *log = NULL;
u32 len = 0;
if(NULL == module_name) {
return NULL;
}
len = strlen(module_name);
if (len > MAX_MODULE_NAME_SZ) {
printk(KERN_ERR"The length:%d of module_name must be not more than %d, but input module_name is %s", len, MAX_MODULE_NAME_SZ, module_name);
return NULL;
}
log = (klog_t *)kmalloc(sizeof(*log), GFP_KERNEL);
if (NULL == log) {
printk(KERN_ERR"Allocating log memory is failure");
return NULL;
}
memset(log->module_name, '\0', MAX_MODULE_NAME_SZ+1);
strncpy(log->module_name, module_name, len);
return log;
}
void klog_close(klog_t *log)
{
if (log != NULL) {
kfree(log);
}
}
void klog_record(const klog_t *log, const char* level_str, const char *fmt, ...)
{
char log_buf[LOG_MSG_SZ];
va_list args;
va_start(args, fmt);
vsnprintf(log_buf, sizeof(log_buf), fmt, args);
va_end(args);
if (NULL != log) {
printk("%s"MODULE_FMT" %s", level_str, log->module_name, log_buf) ;
}
else {
printk("%s %s", level_str, log_buf) ;
}
}
EXPORT_SYMBOL_GPL(klog_init);
EXPORT_SYMBOL_GPL(klog_close);
EXPORT_SYMBOL_GPL(klog_record);
static int __init klog_api_init(void)
{
g_klog = klog_init("klog_api");
KLOG_INFO(g_klog, "Klog is initiated");
return 0;
}
static void __exit klog_api_exit(void)
{
KLOG_INFO(g_klog, "Klog is exited");
klog_close(g_klog);
}
module_init(klog_api_init);
module_exit(klog_api_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Klog_api process module");
MODULE_AUTHOR("zhangtao");