new logger works now

FossilOrigin-Name: 8caefb55dcea0bebc0d75368d38571c71bbf656b7bcea4d4c34bfda93367982a
This commit is contained in:
7u83@mail.ru
2018-03-05 06:18:02 +00:00
parent cd45e604f3
commit 61183b47ae
10 changed files with 229 additions and 264 deletions

View File

@ -7,34 +7,53 @@
static struct cw_FormatDumpSettings CW_FORMAT_DUMP_SETTINGS = {
32/*CW_FORMAT_DUMP_ROW_LEN*/, /* rowlen */
1, /* ascii */
0, /* settings->invlen */
"\n\t", /* dump_prefix */
32, /* row_len */
8, /* marker_distance */
'|', /* marker_char */
1, /* ascii */
0, /* inv_len */
'*', /* inv_char */
"\n\t", /* dump_prefix */
" ", /* ascii_prefix */
"\n\t" /* newline */
};
void cw_format_get_dump_defaults(struct cw_FormatDumpSettings * settings)
{
memcpy(settings, &CW_FORMAT_DUMP_SETTINGS,
sizeof(struct cw_FormatDumpSettings));
}
static int cw_format_dump_row(char *dst, const uint8_t * data, int len,
struct cw_FormatDumpSettings * settings){
char *pdst, marker;
int i;
static int cw_format_dump_row(char *dst, const uint8_t * data, int len){
char *pdst = dst;
int i;
char *sp;
pdst = dst;
for (i = 0; i < len; i++) {
sp = ((i+1)%4==0 && i<len-1) ? "|" : " ";
pdst += sprintf(pdst, "%02X%s", data[i] & 0xff, sp);
marker = ((i+1)% settings->marker_distance==0 && i<len-1)
? settings->marker_char
: ' ';
pdst += sprintf(pdst, "%02X%c", data[i] & 0xff, marker);
}
pdst+=sprintf(pdst," ");
for (i = 0; i < len; i++) {
int c = data[i] & 0xff;
if (c < 0x20 || c > 0x7f)
c = '.';
pdst+=sprintf(pdst,"%c",c);
if (settings->ascii){
for(i=len; i<settings->row_len; i++){
pdst += sprintf(pdst," ");
}
pdst+=sprintf(pdst,"%s",settings->ascii_prefix);
for (i = 0; i < len; i++) {
int c = data[i] & 0xff;
if (c < 0x20 || c > 0x7f)
c = '.';
pdst+=sprintf(pdst,"%c",c);
}
}
pdst+=sprintf(pdst,"%s","\n");
pdst+=sprintf(pdst,"%s",settings->newline);
return pdst-dst;
}
@ -52,84 +71,44 @@ static int cw_format_dump_row(char *dst, const uint8_t * data, int len){
char *cw_format_dump(const uint8_t * data, int len,
struct cw_FormatDumpSettings *settings)
{
int i;
int row,rows;
int row,rows,size;
char *dst, *pdst;
if (!settings)
settings = &CW_FORMAT_DUMP_SETTINGS;
rows = len / settings->rowlen;
rows = len / settings->row_len;
if (len % settings->row_len)
rows++;
size = strlen(settings->dump_prefix) +
rows * strlen(settings->newline) +
(settings->ascii ? rows*settings->row_len*3 : len * 3);
if (settings->ascii){
size += len + rows*strlen(settings->ascii_prefix);
}
printf("Number fo rows: %d\n",rows);
int md;
if (settings->ascii)
md = 2;
else
md = 1;
char *dst = malloc(2 * (md * (len * 3 + (rows * 2) + 8 )));
dst = malloc(size+1);
if (!dst)
return NULL;
if (len % settings->rowlen)
rows++;
char *pdst = dst;
pdst += sprintf(pdst, "%s",settings->dump_prefix);
/* pdst += 2; */
char asc_buffer[128];
char *ascdst = asc_buffer;
pdst = dst;
for (row; row<rows; row++){
int n;
pdst += cw_format_dump_row(pdst,data+row*settings->rowlen,settings->rowlen);
}
return dst;
pdst += sprintf(pdst, "%s",settings->dump_prefix);
for (i = 0; i < len; i++) {
char *sp = " ";
if (i == settings->invlen - 1)
sp = "|";
pdst += sprintf(pdst, "%02X%s", data[i] & 0xff, sp);
if (settings->ascii) {
int c = data[i] & 0xff;
if (c < 0x20 || c > 0x7f)
c = '.';
*ascdst = c;
ascdst++;
for (row=0; row<rows; row++){
int rlen, pos;
pos = row * settings->row_len;
if (len - pos > settings->row_len){
rlen = settings->row_len;
}
if ((i + 1) % settings->rowlen == 0) {
int l;
if (settings->ascii) {
*ascdst = 0;
l = sprintf(pdst, " | %s\n\t", asc_buffer);
ascdst = asc_buffer;
} else {
l = sprintf(pdst, "\n\t");
}
pdst += l;
else{
rlen = len-pos;
}
}
if (settings->ascii) {
*ascdst = 0;
if (strlen(asc_buffer))
pdst += sprintf(pdst, " | %s", asc_buffer);
pdst += cw_format_dump_row(pdst,data+pos, rlen, settings);
}
return dst;
}

View File

@ -54,10 +54,10 @@
*/
/*
void (*cw_dbg_cb) (int level, const char *format, ...) = CW_LOG_DEFAULT_LOG;
void (*cw_dbg_vcb) (int level, const char *fromat, va_list args) = CW_LOG_DEFAULT_VLOG;
*/
uint32_t cw_dbg_opt_display = 0;
@ -613,7 +613,8 @@ void cw_dbg_colored(int level, const char *file, int line, const char *format, .
va_list args;
va_start(args, format);
cw_log_vcb(level, fbuf, args);
/* cw_log_vcb(level, fbuf, args);*/
cw_log_console_writer.write(LOG_DEBUG,fbuf,args,&cw_log_console_writer);
va_end(args);
}

View File

@ -4,8 +4,11 @@
#include "dbg.h"
#include "log.h"
void cw_debug(const char * file, int line, struct dbg_Context *ctx, int level,
const char * format, ...){
va_list args;
if (!(cw_dbg_is_level(level)))
return;
@ -18,9 +21,9 @@ void cw_debug(const char * file, int line, struct dbg_Context *ctx, int level,
);
*/
va_list args;
va_start(args, format);
cw_log_vcb(level, format, args);
cw_log_console_writer.write(LOG_DEBUG,format,args,&cw_log_console_writer);
va_end(args);
}

View File

@ -85,21 +85,27 @@ int format_dot11_fc(char *dst, uint16_t fc);
#ifndef CW_FORMAT_DUMP_ROW_LEN
#define CW_FORMAT_DUMP_ROW_LEN 16
#endif
struct cw_FormatDumpSettings {
int rowlen;
int row_len;
int marker_distance;
char marker_char;
int ascii;
int invlen;
int inv_len;
char inv_char;
const char * dump_prefix;
const char * ascii_prefix;
const char *newline;
};
char *cw_format_dump(const uint8_t * data, int len,
struct cw_FormatDumpSettings *settings);
void cw_format_get_dump_defaults(struct cw_FormatDumpSettings * settings);
/**@}*/
#endif

View File

@ -19,108 +19,98 @@
#include <stdio.h>
#include <stdarg.h>
#include "strlist.h"
#include "log.h"
/*
void (*cw_log_cb)(int level,const char * fromat, ...) = CW_LOG_DEFAULT_LOG;
void (*cw_log_vcb)(int level,const char * fromat, va_list args) = CW_LOG_DEFAULT_VLOG;
*/
const char * cw_log_name = "actube";
const char * cw_log_name = "cw";
static int colored=1;
static struct cw_strlist_elem prefix[] = {
{LOG_DEBUG, "DBG"},
{LOG_INFO, "INF" },
{LOG_NOTICE, "NOTICE"},
{LOG_WARNING, "WARNING"},
{LOG_ERR,"ERROR"},
{CW_STR_STOP, NULL}
};
static struct cw_strlist_elem prefix_color[] = {
{LOG_DEBUG, ""},
{LOG_INFO, "" },
{LOG_NOTICE, ""},
{LOG_WARNING, ""},
{LOG_ERR,"\033[1;31m"},
{CW_STR_STOP, NULL}
};
static struct cw_strlist_elem text_color[] = {
{LOG_DEBUG, ""},
{LOG_INFO, "" },
{LOG_NOTICE, ""},
{LOG_WARNING, ""},
{LOG_ERR,"\033[22m"},
{CW_STR_STOP, NULL}
};
static struct cw_strlist_elem end_color[] = {
{LOG_DEBUG, ""},
{LOG_INFO, "" },
{LOG_NOTICE, ""},
{LOG_WARNING, ""},
{LOG_ERR,"\033[22;39m"},
{CW_STR_STOP, NULL}
};
static struct cw_LogWriter * writers[] = {
&cw_log_syslog_writer,
&cw_log_console_writer,
NULL
};
static const char * get_log_prefix(int level)
void cw_log(int prio, const char *format, ...)
{
switch(level){
case LOG_DEBUG:
return "DBG";
case LOG_INFO:
return "INF";
case LOG_ERR:
return "ERROR";
case LOG_WARNING:
return "WARNING";
}
return "";
}
static const char * get_log_color_on(int level){
if ( !colored )
return "";
switch(level){
case LOG_DEBUG:
return "";
case LOG_INFO:
return "";
case LOG_ERR:
return "\033[1;31m";
}
return "";
}
static const char * get_log_color_ontext(int level){
if ( !colored )
return "";
switch(level){
case LOG_DEBUG:
return "";
case LOG_INFO:
return "";
case LOG_ERR:
return "\033[22m";
}
return "";
}
static const char * get_log_color_off(int level){
if ( !colored )
return "";
switch(level){
case LOG_DEBUG:
return "";
case LOG_INFO:
return "";
case LOG_ERR:
return "\033[22;39m";
}
return "";
}
void cw_log_colored(int level, const char *format, ...)
{
char fbuf[1024];
sprintf(fbuf, "%s%s%s: %s%s",
get_log_color_on(level),
get_log_prefix(level),
get_log_color_ontext(level),
format,
get_log_color_off(level)
);
va_list args;
va_start(args, format);
cw_log_vcb(level,fbuf,args);
va_end(args);
char fbuf[1024];
int i;
for (i=0; writers[i]; i++){
if (writers[i]->colored){
sprintf(fbuf, "%s%s%s: %s%s",
cw_strlist_get_str(prefix_color,prio),
cw_strlist_get_str(prefix,prio),
cw_strlist_get_str(text_color,prio),
format,
cw_strlist_get_str(end_color,prio)
);
}
else{
sprintf(fbuf, "%s: %s",
cw_strlist_get_str(prefix,prio),
format
);
}
va_start(args, format);
writers[i]->write(prio,fbuf,args,writers[i]);
va_end(args);
}
}
void cw_log_init(){
int i;
for (i=0; writers[i]; i++){
writers[i]->open();
}
}

View File

@ -39,71 +39,42 @@
#define CW_LOG_DEFAULT_VLOG cw_log_vfile
#endif
struct cw_LogWriter {
const char * name;
int colored;
void (*open) ();
void (*write) (int prio, const char *format, va_list args, struct cw_LogWriter *w);
void (*close) ();
void * priv;
};
extern struct cw_LogWriter cw_log_syslog_writer;
extern struct cw_LogWriter cw_log_console_writer;
void cw_log_init();
void cw_log(int level, const char *format, ...);
extern const char *cw_log_name;
/****/
/*
//extern void cw_log_dbg_(int type, const char *file, int line, const char *fromat, ...);
//extern void cw_log_dbg_dmp_(int type, const char *file, int line, const uint8_t * data,
//int len, const char *format, ...);
*/
/*#ifdef WITH_CW_LOG*/
/*#define cw_log(level,...) cw_log_colored(level,__VA_ARGS__)*/
#define cw_log cw_log_colored
/*#else
#define cw_log(...)
#endif
*/
/*
//#ifdef WITH_CW_LOG_DEBUG
//#define cw_log_dbg(type,...) cw_log_dbg_(type,__FILE__,__LINE__,__VA_ARGS__)
//#define cw_log_dbg_dmp(type,str,len,...) cw_log_dbg_dmp_(type,__FILE__,__LINE__,str,len,__VA_ARGS__)
//#define cw_dbg_dmp(type,str,len,...) cw_log_dbg_dmp_(type,__FILE__,__LINE__,str,len,__VA_ARGS__)
//#define cw_dbg_msgelem(msgtype,msgelemtype,msgbuf,msglen) cw_dbg_msgelem_(msgtype,msgelemtype,msgbuf,msglen)
//#define cw_dbg_missing_mand_elems(conn, msgtyoe, mand) cw_dbg_missing_mand_elems_(conn, msgtyoe, mand)
//#define lw_dbg_elem(msgtype,msgelemtype,msgbuf,msglen) lw_dbg_elem_(msgtype,msgelemtype,msgbuf,msglen)
//#else
//#define cw_log_dbg(...)
//#define cw_dbg(...)
//#define cw_dbg_missing_mand_elems(conn, msgtyoe, mand)
//#endif
*/
extern void (*cw_log_cb) (int level, const char *fromat, ...);
/*extern void (*cw_log_cb) (int level, const char *fromat, ...);
extern void (*cw_log_vcb) (int level, const char *fromat, va_list args);
*/
/* Syslog functins */
extern void cw_log_syslog(int level, const char *format, ...);
extern void cw_log_vsyslog(int level,const char * format, va_list args);
/* Log to File functions */
/*
void cw_log_vfile(int level,const char * format, va_list args);
void cw_log_file(int level,const char *format, ...);
*/
void cw_log_colored(int level, const char *format, ...);
/*
@ -112,6 +83,8 @@ void cw_log_colored(int level, const char *format, ...);
//extern void (*cw_log_debug_cbs[]) (const char *fromat, ...);
*/
/*
extern int cw_log_debug_dump_(int level, const uint8_t * data, int len,
const char *format, ...);
@ -138,6 +111,6 @@ struct cw_dbg_cfgstrs {
extern struct cw_dbg_cfgstrs cw_dbg_cfgstrs[];
*/
#endif

View File

@ -4,23 +4,23 @@
#include "log.h"
int cw_log_file_flags = LOG_PERROR;
char * cw_log_filename = NULL;
static void open(){
}
static void close(){
void cw_log_vfile(int level,const char * format, va_list args)
}
static void write(int level,const char * format, va_list args, struct cw_LogWriter * w)
{
vprintf(format,args);
vprintf(format,args);
printf("\n");
}
void cw_log_file(int level,const char *format, ...)
{
va_list args;
va_start(args, format);
cw_log_vfile(level,format,args);
va_end(args);
closelog();
}
struct cw_LogWriter cw_log_console_writer = {
"syslog", /* name */
1, /* colored */
open, /* open */
write, /* write */
close, /* close */
NULL /* priv */
};

View File

@ -17,21 +17,29 @@
*/
#include <stdarg.h>
#include <stdio.h>
#include "log.h"
void cw_log_vsyslog(int level,const char * format, va_list args)
static void open(){
/* openlog (cw_log_name, LOG_PERROR | LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); */
openlog (cw_log_name, LOG_NDELAY, LOG_USER);
}
static void close(){
}
static void write(int level,const char * format, va_list args, struct cw_LogWriter * w)
{
openlog (cw_log_name, LOG_PERROR | LOG_CONS | LOG_PID | LOG_NDELAY, LOG_DEBUG);
vsyslog(level,format,args);
}
void cw_log_syslog(int level,const char *format, ...)
{
va_list args;
va_start(args, format);
cw_log_vsyslog(level,format,args);
va_end(args);
closelog();
}
struct cw_LogWriter cw_log_syslog_writer = {
"syslog", /* name */
0, /* colored */
open, /* open */
write, /* write */
close, /* close */
NULL /* priv */
};