blob: 4c606dc90158104db241d96cf9fd86115328fe1f [file] [log] [blame]
#include "liblog.h"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <log/log.h>
#include <include/lynq_uci.h>
#define LOG_NAME_LEN 128
#define LOG_OUT_LEN 2*1024+100 //lt add @2021.9.22 for write outbuf define len
#define LOG_LEN 2*1024 //lt add @2021.9.22 for write buf define len
#define LOG_UCI_MODULE "lynq_log"
#define LOG_UCI_FILE "lynq_uci"
static unsigned int log_level = 0;
static unsigned char log_name_arr[LOG_NAME_LEN] = {0};
int lynq_log_set_value(char *key, char *value);
int lynq_log_get_value(char *key, char *tmp);
void lynq_log_global_output(log_level_enum Level,const char *format,...)
{
#if LOG_ENABLE
char out_buf[LOG_OUT_LEN] = {0};
char buf[LOG_LEN] = {0};
if(Level >= LOG_LEVEL_MAX)
return;
if((log_level >> Level)&0x00000001)
{
va_list args;
//TagName
if(log_name_arr[0] > 0)
{
printf("[%s]",log_name_arr);
}
//LevelName
printf("%s:",LogLevelNameInfoTable[Level]); //lt dele @2021.7.22 for []
va_start(args,format);
vprintf(format,args);
vsnprintf(buf, sizeof(buf), format, args); //lt add @2021.7.22 for write buf
va_end(args);
printf("\r\n");
sprintf(out_buf, "%s %s", LogLevelNameInfoTable[Level], buf);//lt add @2021.7.22 for write outbuf
switch(Level) //lt mod @2021.9.22 for matching MTK log level
{
case LOG_VERBOSE:
__android_log_print(ANDROID_LOG_VERBOSE,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
break;
case LOG_ERROR:
__android_log_print(ANDROID_LOG_ERROR,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
break;
case LOG_WARNING:
__android_log_print(ANDROID_LOG_WARN,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
break;
case LOG_INFO:
__android_log_print(ANDROID_LOG_INFO,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
break;
case LOG_DEBUG:
__android_log_print(ANDROID_LOG_DEBUG,log_name_arr, "%s",out_buf); //lt add @2021.7.22 for write syslog.log
break;
default :
__android_log_print(ANDROID_LOG_DEBUG,log_name_arr, "Log Level is Error!!!!!!"); //lt add @2021.9.22 for write syslog.log
break;
}
}
return ;
#endif //LOG_ENABLE
}
void lynq_log_configuration_set(char *log_name,char log_data_arr)
{
char log_data_str[32] = {0};
if(log_name == NULL)
{
return ;
}
if(log_data_arr < LOG_LEVEL_MAX)
{
sprintf(log_data_str,"%d",log_data_arr);
if((strlen(log_name)) < LOG_NAME_LEN)
{
lynq_log_set_value(log_name, log_data_str);//lt mod @2021.8.3 for uci
}
}
lynq_log_configuration_init(log_name);
return ;
}
void lynq_deal_with_level(unsigned int get_log_level)
{
switch(get_log_level)
{
case LOG_DEBUG:
log_level |= ENABLE(LOG_DEBUG);
case LOG_INFO:
log_level |= ENABLE(LOG_INFO);
case LOG_WARNING:
log_level |= ENABLE(LOG_WARNING);
case LOG_ERROR:
log_level |= ENABLE(LOG_ERROR);
case LOG_VERBOSE:
log_level |= ENABLE(LOG_VERBOSE);
break;
default:
log_level |= ENABLE(LOG_VERBOSE);
break;
}
return ;
}
void lynq_log_configuration_init(char *log_name)
{
char get_propty_log_data[32] ={0};
unsigned int get_log_level = 0;
if(log_name == NULL)
{
return ;
}
if((strlen(log_name)) < LOG_NAME_LEN)
{
strcpy(log_name_arr,log_name);
if(0 == lynq_log_get_value(log_name,get_propty_log_data))//lt mod @2021.8.3 for uci
{
get_log_level = atoi(get_propty_log_data);
}
else
{
lynq_log_configuration_set(log_name, get_log_level);//lt add @2021.09.06 for uci
}
}
lynq_deal_with_level(get_log_level);
return ;
}
//lt add @2021.8.3 for in encapsulating the UCI set function
int lynq_log_set_value(char *key, char *value)
{
return lynq_set_value(LOG_UCI_MODULE, key, value);
}
//lt add @2021.8.3 for in encapsulating the UCI get function
int lynq_log_get_value(char *key, char *tmp)
{
return lynq_get_value(LOG_UCI_FILE, LOG_UCI_MODULE, key, tmp);
}
//lt add @2022.1.5 for add fota lib name.
char* lynq_read_log_version()
{
return "LOG-V1.0";
}
/**
* @brief Verbose logs are printed and stored
*
* @param log data
* @return void
*/
void lynq_log_verbose(const char *format,...)
{
#if LOG_ENABLE
char out_buf[LOG_OUT_LEN] = {0};
char buf[LOG_LEN] = {0};
log_level_enum lynq_level = LOG_VERBOSE;
if(lynq_level >= LOG_LEVEL_MAX)
return;
if((log_level >> lynq_level)&0x00000001)
{
va_list args;
//TagName
if(log_name_arr[0] > 0)
{
printf("[%s]",log_name_arr);
}
//LevelName
printf("%s:",LogLevelNameInfoTable[lynq_level]); //lt dele @2021.7.22 for []
va_start(args,format);
vprintf(format,args);
vsnprintf(buf, sizeof(buf), format, args); //lt add @2021.7.22 for write buf
va_end(args);
printf("\r\n");
sprintf(out_buf, "%s %s",LogLevelNameInfoTable[lynq_level], buf);//lt add @2021.7.22 for write outbuf
__android_log_print(ANDROID_LOG_VERBOSE,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
}
return ;
#endif //LOG_ENABLE
}
/**
* @brief Error logs are printed and stored
*
* @param log data
* @return void
*/
void lynq_log_error(const char *format,...)
{
#if LOG_ENABLE
char out_buf[LOG_OUT_LEN] = {0};
char buf[LOG_LEN] = {0};
log_level_enum lynq_level = LOG_ERROR;
if(lynq_level >= LOG_LEVEL_MAX)
return;
if((log_level >> lynq_level)&0x00000001)
{
va_list args;
//TagName
if(log_name_arr[0] > 0)
{
printf("[%s]",log_name_arr);
}
//LevelName
printf("%s:",LogLevelNameInfoTable[lynq_level]); //lt dele @2021.7.22 for []
va_start(args,format);
vprintf(format,args);
vsnprintf(buf, sizeof(buf), format, args); //lt add @2021.7.22 for write buf
va_end(args);
printf("\r\n");
sprintf(out_buf, "%s %s",LogLevelNameInfoTable[lynq_level], buf);//lt add @2021.7.22 for write outbuf
__android_log_print(ANDROID_LOG_ERROR,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
}
return ;
#endif //LOG_ENABLE
return ;
}
/**
* @brief Warning logs are printed and stored
*
* @param log data
* @return void
*/
void lynq_log_warning(const char *format,...)
{
#if LOG_ENABLE
char out_buf[LOG_OUT_LEN] = {0};
char buf[LOG_LEN] = {0};
log_level_enum lynq_level = LOG_WARNING;
if(lynq_level >= LOG_LEVEL_MAX)
return;
if((log_level >> lynq_level)&0x00000001)
{
va_list args;
//TagName
if(log_name_arr[0] > 0)
{
printf("[%s]",log_name_arr);
}
//LevelName
printf("%s:",LogLevelNameInfoTable[lynq_level]); //lt dele @2021.7.22 for []
va_start(args,format);
vprintf(format,args);
vsnprintf(buf, sizeof(buf), format, args); //lt add @2021.7.22 for write buf
va_end(args);
printf("\r\n");
sprintf(out_buf, "%s %s",LogLevelNameInfoTable[lynq_level], buf);//lt add @2021.7.22 for write outbuf
__android_log_print(ANDROID_LOG_WARN,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
}
return ;
#endif //LOG_ENABLE
return ;
}
/**
* @brief Info logs are printed and stored
*
* @param log data
* @return void
*/
void lynq_log_info(const char *format,...)
{
#if LOG_ENABLE
char out_buf[LOG_OUT_LEN] = {0};
char buf[LOG_LEN] = {0};
log_level_enum lynq_level = LOG_INFO;
if(lynq_level >= LOG_LEVEL_MAX)
return;
if((log_level >> lynq_level)&0x00000001)
{
va_list args;
//TagName
if(log_name_arr[0] > 0)
{
printf("[%s]",log_name_arr);
}
//LevelName
printf("%s:",LogLevelNameInfoTable[lynq_level]); //lt dele @2021.7.22 for []
va_start(args,format);
vprintf(format,args);
vsnprintf(buf, sizeof(buf), format, args); //lt add @2021.7.22 for write buf
va_end(args);
printf("\r\n");
sprintf(out_buf, "%s %s",LogLevelNameInfoTable[lynq_level], buf);//lt add @2021.7.22 for write outbuf
__android_log_print(ANDROID_LOG_INFO,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
}
return ;
#endif //LOG_ENABLE
return ;
}
/**
* @brief debug logs are printed and stored
*
* @param log data
* @return void
*/
void lynq_log_debug(const char *format,...)
{
#if LOG_ENABLE
char out_buf[LOG_OUT_LEN] = {0};
char buf[LOG_LEN] = {0};
log_level_enum lynq_level = LOG_DEBUG;
if(lynq_level >= LOG_LEVEL_MAX)
return;
if((log_level >> lynq_level)&0x00000001)
{
va_list args;
//TagName
if(log_name_arr[0] > 0)
{
printf("[%s]",log_name_arr);
}
//LevelName
printf("%s:",LogLevelNameInfoTable[lynq_level]); //lt dele @2021.7.22 for []
va_start(args,format);
vprintf(format,args);
vsnprintf(buf, sizeof(buf), format, args); //lt add @2021.7.22 for write buf
va_end(args);
printf("\r\n");
sprintf(out_buf, "%s %s",LogLevelNameInfoTable[lynq_level], buf);//lt add @2021.7.22 for write outbuf
__android_log_print(ANDROID_LOG_DEBUG,log_name_arr, "%s",out_buf); //lt add @2021.9.22 for write syslog.log
}
return ;
#endif //LOG_ENABLE
return ;
}
/**
* @brief Set the syslog file size
*
* @param syslog file size (M)
* @return 0:success other:fial
*/
int lynq_syslog_set_file_size(int value)
{
char lynq_syslog_data[64] = {0};
if(value <10)
{
value = 10;
}
else if(value > 1024)
{
value = 1024;
}
snprintf(lynq_syslog_data,sizeof(lynq_syslog_data),"%d",(value*1024*1024));//Converts bytes to M
return lynq_set_value(LOG_UCI_MODULE,"syslog_flie_size", lynq_syslog_data);
}
/**
* @brief Get the syslog file size
*
* @param log data
* @return 10-1024:success -1:fial
*/
int lynq_syslog_get_file_size(void)
{
int lynq_syslog_size = 0;
char lynq_syslog_data[64] = {0};
if(0 == lynq_get_value(LOG_UCI_FILE, LOG_UCI_MODULE, "syslog_flie_size", lynq_syslog_data))
{
lynq_syslog_size = ((atoi(lynq_syslog_data)) / 1024) /1024;
return lynq_syslog_size;
}
return -1;
}
/**
* @brief Set the syslog file rotate
*
* @param syslog file rotate number
*
* @return 0:success other:fial
*/
int lynq_syslog_set_file_rotate(int value)
{
char lynq_syslog_data[64] = {0};
if(value < 0)
{
value = 0;
}
else if(value > 100)
{
value = 100;
}
snprintf(lynq_syslog_data,sizeof(lynq_syslog_data),"%d",value);
return lynq_set_value(LOG_UCI_MODULE,"syslog_flie_rotate", lynq_syslog_data);
}
/**
* @brief Example Set the number of syslog files cut
*
* @param log data
* @return 10-1024:success -1:fial
*/
int lynq_syslog_get_file_rotate(void)
{
int lynq_syslog_rotate = 0;
char lynq_syslog_data[64] = {0};
if(0 == lynq_get_value(LOG_UCI_FILE, LOG_UCI_MODULE, "syslog_flie_rotate", lynq_syslog_data))
{
lynq_syslog_rotate = atoi(lynq_syslog_data);
return lynq_syslog_rotate;
}
return -1;
}