30#include <gwenhywfar/gwenhywfarapi.h>
31#include <gwenhywfar/misc.h>
32#include <gwenhywfar/buffer.h>
33#include <gwenhywfar/gui.h>
73static int _logMessageToSyslog(GWEN_LOGGER *lg,
GWEN_LOGGER_LEVEL priority,
const char *s);
81#ifndef NO_DEPRECATED_SYMBOLS
91#ifndef NO_DEPRECATED_SYMBOLS
122 s=getenv(
"GWEN_LOGLEVEL");
136 GWEN_LOGGER_DOMAIN *ld;
149 GWEN_LOGGER_DOMAIN *ld;
153 ld->name=strdup(name);
171 GWEN_LOGGER_DOMAIN *ld;
176 if (strcasecmp(ld->name, name)==0)
204 GWEN_LOGGER_DOMAIN *ld;
241 if (--(lg->usage)==0) {
260#ifndef NO_DEPRECATED_SYMBOLS
272#ifndef NO_DEPRECATED_SYMBOLS
275 fprintf(stderr,
"GWEN_Logger_SetDefaultLogger: Deprecated function\n");
307 fprintf(stderr,
"LOGGER: No filename given, will log to console.\n");
339 openlog(ident, LOG_CONS | LOG_PID, fac);
379 GWEN_LOGGER_DOMAIN *ld;
384 return ld?(ld->logger->open):0;
411 if (priority<=lg->logLevel) {
422 for (i=0; i<slen+1; i++) {
504 lg->logIdent=strdup(
id);
506 lg->logIdent=strdup(
"No ident, please adjust your program");
520 lg->logFile=strdup(name);
522 lg->logFile=strdup(
"");
535 oldFn=lg->logFunction;
544 if (strcasecmp(name,
"emergency")==0)
546 else if (strcasecmp(name,
"alert")==0)
548 else if (strcasecmp(name,
"critical")==0)
550 else if (strcasecmp(name,
"error")==0)
552 else if (strcasecmp(name,
"warning")==0)
554 else if (strcasecmp(name,
"notice")==0)
556 else if (strcasecmp(name,
"info")==0)
558 else if (strcasecmp(name,
"debug")==0)
560 else if (strcasecmp(name,
"verbous")==0 || strcasecmp(name,
"verbose")==0)
614 if (strcasecmp(name,
"console")==0)
616 else if (strcasecmp(name,
"file")==0)
618 else if (strcasecmp(name,
"syslog")==0)
620 else if (strcasecmp(name,
"function")==0)
670 if (priority<=lg->logLevel) {
673 switch (lg->logType) {
708 f=fopen(lg->logFile,
"a+");
710 fprintf(stderr,
"LOGGER: Unable to open file \"%s\" (%s)\n", lg->logFile, strerror(errno));
717 fprintf(stderr,
"LOGGER: Unable to write to file \"%s\" (%s)\n", lg->logFile, strerror(errno));
724 fprintf(stderr,
"LOGGER: Unable to close file \"%s\" (%s)\n", lg->logFile, strerror(errno));
790 syslog(pri,
"%s", s);
811 if (lg->logFunction==0) {
812 fprintf(stderr,
"LOGGER: Logtype is \"Function\", but no function is set.\n");
838 "%d:%04d/%02d/%02d %02d-%02d-%02d:",
839 priority, t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int GWEN_Buffer_AppendArgs(GWEN_BUFFER *bf, const char *fmt,...)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
#define GWEN_ERROR_NOT_IMPLEMENTED
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWENHYWFAR_API int GWEN_Gui_LogHook(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s)
static int _logMessageToFunction(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s)
static int _logMessageToFile(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s)
const char * GWEN_Logger_Logtype2Name(GWEN_LOGGER_LOGTYPE lt)
GWENHYWFAR_API void GWEN_Logger_AddLogger(GWEN_LOGGER *oldLogger, GWEN_LOGGER *newLogger) GWEN_DEPRECATED
static int _logMessage(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s)
const char * GWEN_Logger_Level2Name(GWEN_LOGGER_LEVEL level)
GWENHYWFAR_API void GWEN_Logger_SetDefaultLogger(GWEN_LOGGER *lg) GWEN_DEPRECATED
void GWEN_Logger_SetIdent(const char *logDomain, const char *id)
GWEN_LOGGER_LOGTYPE GWEN_Logger_Name2Logtype(const char *name)
int GWEN_Logger_ModuleFini(void)
static void _loggerDomain_Add(GWEN_LOGGER_DOMAIN *ld)
GWEN_LOGGER_LEVEL GWEN_Logger_Name2Level(const char *name)
static void _loggerDomain_free(GWEN_LOGGER_DOMAIN *ld)
void GWEN_Logger_SetFilename(const char *logDomain, const char *name)
int GWEN_Logger_IsEnabled(const char *logDomain)
static int _logMessageToConsole(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s)
static void GWEN_Logger_free(GWEN_LOGGER *lg)
static void _loggerDomain_Del(GWEN_LOGGER_DOMAIN *ld)
static GWEN_LOGGER_DOMAIN * _loggerDomain_new(const char *name)
static GWEN_LOGGER_DOMAIN * gwen_loggerdomains
GWEN_LOGGERFUNCTIONLOG GWEN_Logger_SetLogFunction(const char *logDomain, GWEN_LOGGERFUNCTIONLOG fn)
int GWEN_Logger_ModuleInit(void)
int GWEN_Logger_CreateLogMessage(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf)
void GWEN_Logger_Log(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s)
int GWEN_Logger_GetLevel(const char *logDomain)
void GWEN_Logger_Enable(const char *logDomain, int f)
int GWEN_Logger_Exists(const char *logDomain)
int GWEN_Logger_Open(const char *logDomain, const char *ident, const char *file, GWEN_LOGGER_LOGTYPE logtype, GWEN_LOGGER_FACILITY facility)
static GWEN_LOGGER_DOMAIN * _loggerDomain_Find(const char *name)
static GWEN_LOGGER * _loggerDomain_GetLogger(const char *name)
void GWEN_Logger_SetLevel(const char *logDomain, GWEN_LOGGER_LEVEL l)
int GWEN_Logger_IsOpen(const char *logDomain)
static int _createMessage(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf)
void GWEN_Logger_Close(const char *logDomain)
static GWEN_LOGGER * GWEN_Logger_new(GWEN_LOGGER_DOMAIN *domain)
@ GWEN_LoggerType_Console
@ GWEN_LoggerType_Unknown
@ GWEN_LoggerType_Function
@ GWEN_LoggerFacility_Mail
@ GWEN_LoggerFacility_Unknown
@ GWEN_LoggerFacility_News
@ GWEN_LoggerFacility_Daemon
@ GWEN_LoggerFacility_Auth
@ GWEN_LoggerFacility_User
@ GWEN_LoggerLevel_Emergency
@ GWEN_LoggerLevel_Unknown
@ GWEN_LoggerLevel_Warning
@ GWEN_LoggerLevel_Notice
@ GWEN_LoggerLevel_Critical
@ GWEN_LoggerLevel_Verbous
void GWENHYWFAR_CB(* GWEN_LOGGERFUNCTIONLOG)(const char *s)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
#define GWEN_LIST_ADD(typ, sr, head)
#define GWEN_LIST_INSERT(typ, sr, head)
#define GWEN_LIST_DEL(typ, sr, head)