30#include <gwenhywfar/gwenhywfarapi.h>
31#include <gwenhywfar/misc.h>
32#include <gwenhywfar/buffer.h>
33#include <gwenhywfar/gui.h>
69 s=getenv(
"GWEN_LOGLEVEL");
83 GWEN_LOGGER_DOMAIN *ld;
96 GWEN_LOGGER_DOMAIN *ld;
100 ld->name=strdup(name);
118 GWEN_LOGGER_DOMAIN *ld;
123 if (strcasecmp(ld->name, name)==0)
151 GWEN_LOGGER_DOMAIN *ld;
188 if (--(lg->usage)==0) {
216#ifndef NO_DEPRECATED_SYMBOLS
219 fprintf(stderr,
"GWEN_Logger_SetDefaultLogger: Deprecated function\n");
251 fprintf(stderr,
"LOGGER: No filename given, will log to console.\n");
326 GWEN_LOGGER_DOMAIN *ld;
332 return ld->logger->open;
352 if (strlen(lg->logIdent)+32>=
sizeof(buffer)) {
353 fprintf(stderr,
" LOGGER: Logbuffer too small (1).\n");
364 i=snprintf(buffer,
sizeof(buffer)-1,
365 "%d:%04d/%02d/%02d %02d-%02d-%02d:%s(%d):", priority,
366 t->tm_year+1900, t->tm_mon+1, t->tm_mday,
367 t->tm_hour, t->tm_min, t->tm_sec,
368 lg->logIdent, (
int)getpid());
370 i=snprintf(buffer,
sizeof(buffer)-1,
371 "%d:%04d/%02d/%02d %02d-%02d-%02d:%s:", priority,
372 t->tm_year+1900, t->tm_mon+1, t->tm_mday,
373 t->tm_hour, t->tm_min, t->tm_sec,
376 if (i>=
sizeof(buffer)) {
377 fprintf(stderr,
" LOGGER: Logbuffer too small (2).\n");
382 sprintf(buffer,
"%d:%04d/%02d/%02d %02d-%02d-%02d:%s(%d):", priority,
383 t->tm_year+1900, t->tm_mon+1, t->tm_mday,
384 t->tm_hour, t->tm_min, t->tm_sec,
385 lg->logIdent, (
int)getpid());
387 sprintf(buffer,
"%d:%04d/%02d/%02d %02d-%02d-%02d:%s:", priority,
388 t->tm_year+1900, t->tm_mon+1, t->tm_mday,
389 t->tm_hour, t->tm_min, t->tm_sec,
395 buffer[
sizeof(buffer)-1]=0;
396 i=snprintf(buffer,
sizeof(buffer)-1,
399 if (i>=
sizeof(buffer)) {
400 fprintf(stderr,
" LOGGER: Logbuffer too small (3).\n");
404 sprintf(buffer,
"%d:%s:", priority,
442 if (priority>lg->logLevel)
447 switch (lg->logType) {
455 f=fopen(lg->logFile,
"a+");
458 "LOGGER: Unable to open file \"%s\" (%s)\n",
469 "LOGGER: Unable to write to file \"%s\" (%s)\n",
479 "LOGGER: Unable to close file \"%s\" (%s)\n",
520 syslog(pri,
"%s", s);
525 if (lg->logFunction==0) {
527 "LOGGER: Logtype is \"Function\", but no function is set.\n");
575 if (priority>lg->logLevel)
583 for (i=0; i<strlen(s)+1; i++) {
665 lg->logIdent=strdup(
id);
667 lg->logIdent=strdup(
"No ident, please adjust your program");
681 lg->logFile=strdup(name);
683 lg->logFile=strdup(
"");
696 oldFn=lg->logFunction;
705 if (strcasecmp(name,
"emergency")==0)
707 else if (strcasecmp(name,
"alert")==0)
709 else if (strcasecmp(name,
"critical")==0)
711 else if (strcasecmp(name,
"error")==0)
713 else if (strcasecmp(name,
"warning")==0)
715 else if (strcasecmp(name,
"notice")==0)
717 else if (strcasecmp(name,
"info")==0)
719 else if (strcasecmp(name,
"debug")==0)
721 else if (strcasecmp(name,
"verbous")==0 || strcasecmp(name,
"verbose")==0)
775 if (strcasecmp(name,
"console")==0)
777 else if (strcasecmp(name,
"file")==0)
779 else if (strcasecmp(name,
"syslog")==0)
781 else if (strcasecmp(name,
"function")==0)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
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)
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)
void GWEN_LoggerDomain_Del(GWEN_LOGGER_DOMAIN *ld)
GWEN_LOGGER_DOMAIN * GWEN_LoggerDomain_Find(const char *name)
const char * GWEN_Logger_Logtype2Name(GWEN_LOGGER_LOGTYPE lt)
const char * GWEN_Logger_Level2Name(GWEN_LOGGER_LEVEL level)
void GWEN_Logger_SetIdent(const char *logDomain, const char *id)
GWEN_LOGGER_LOGTYPE GWEN_Logger_Name2Logtype(const char *name)
int GWEN_Logger_ModuleFini(void)
GWEN_LOGGER_LEVEL GWEN_Logger_Name2Level(const char *name)
void GWEN_Logger_SetFilename(const char *logDomain, const char *name)
int GWEN_Logger_IsEnabled(const char *logDomain)
void GWEN_Logger_free(GWEN_LOGGER *lg)
static GWEN_LOGGER_DOMAIN * gwen_loggerdomains
void GWEN_LoggerDomain_Add(GWEN_LOGGER_DOMAIN *ld)
int GWEN_Logger__Log(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s)
void GWEN_LoggerDomain_free(GWEN_LOGGER_DOMAIN *ld)
int GWEN_Logger__CreateMessage(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf)
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)
GWEN_LOGGER * GWEN_LoggerDomain_GetLogger(const char *name)
GWEN_LOGGER_DOMAIN * GWEN_LoggerDomain_new(const char *name)
int GWEN_Logger_GetLevel(const char *logDomain)
void GWEN_Logger_SetDefaultLogger(GWEN_UNUSED GWEN_LOGGER *lg)
void GWEN_Logger_Enable(const char *logDomain, int f)
void GWEN_Logger_Attach(GWEN_LOGGER *lg)
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)
void GWEN_Logger_SetLevel(const char *logDomain, GWEN_LOGGER_LEVEL l)
void GWEN_Logger_AddLogger(GWEN_LOGGER *oldLogger, GWEN_LOGGER *newLogger)
int GWEN_Logger_IsOpen(const char *logDomain)
void GWEN_Logger_Close(const char *logDomain)
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)