new logger works now
FossilOrigin-Name: 8caefb55dcea0bebc0d75368d38571c71bbf656b7bcea4d4c34bfda93367982a
This commit is contained in:
parent
cd45e604f3
commit
61183b47ae
@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CodeLite_Workspace Name="actube" Database="">
|
||||
<Project Name="ac" Path="ac.project" Active="Yes"/>
|
||||
<Project Name="ac" Path="ac.project" Active="No"/>
|
||||
<Project Name="wtp" Path="wtp.project" Active="No"/>
|
||||
<Project Name="mod_cipwap" Path="mod_cipwap.project" Active="No"/>
|
||||
<Project Name="mod_capwap" Path="mod_capwap.project" Active="No"/>
|
||||
<Project Name="mod_cisco" Path="mod_cisco.project" Active="No"/>
|
||||
<Project Name="libcw" Path="libcw.project" Active="No"/>
|
||||
<Project Name="libcw" Path="libcw.project" Active="Yes"/>
|
||||
<Project Name="mod_capwap80211" Path="mod_capwap80211.project" Active="No"/>
|
||||
<Project Name="mod_fortinet" Path="mod_fortinet.project" Active="No"/>
|
||||
<BuildMatrix>
|
||||
|
@ -98,15 +98,20 @@ extern void test_sets();
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
/* cw_log_init();
|
||||
cw_log(LOG_ERROR,"Hello Debug World222");
|
||||
exit(0);
|
||||
*/
|
||||
/*
|
||||
char * dump_data = "Eine kleine Mickey Maus zog sich mal die Hosen\
|
||||
aus, zog sie wieder an, und du bist dran. Dran bist du noch lange nicht\
|
||||
musst erst sagen, wie alt du bist.";
|
||||
|
||||
char * result = cw_format_dump(dump_data,strlen(dump_data),0);
|
||||
char * result = cw_format_dump(dump_data,strlen(dump_data),NULL);
|
||||
|
||||
printf("Dump Result:\n%s\n", result);
|
||||
exit(0);
|
||||
|
||||
*/
|
||||
|
||||
/* char data[100];
|
||||
mavl_t im;
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
172
src/cw/log.c
172
src/cw/log.c
@ -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();
|
||||
}
|
||||
}
|
||||
|
79
src/cw/log.h
79
src/cw/log.h
@ -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
|
||||
|
@ -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 */
|
||||
};
|
||||
|
@ -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 */
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user