30 #include <gwenhywfar/gwenhywfarapi.h>
31 #include <gwenhywfar/misc.h>
32 #include <gwenhywfar/buffer.h>
33 #include <gwenhywfar/gui.h>
68 s=getenv(
"GWEN_LOGLEVEL");
81 GWEN_LOGGER_DOMAIN *ld;
93 GWEN_LOGGER_DOMAIN *ld;
97 ld->name=strdup(name);
113 GWEN_LOGGER_DOMAIN *ld;
118 if (strcasecmp(ld->name, name)==0)
143 GWEN_LOGGER_DOMAIN *ld;
178 if (--(lg->usage)==0) {
204 #ifndef NO_DEPRECATED_SYMBOLS
206 fprintf(stderr,
"GWEN_Logger_SetDefaultLogger: Deprecated function\n");
208 #endif // ifndef NO_DEPRECATED_SYMBOLS
231 fprintf(stderr,
"LOGGER: No filename given, will log to console.\n");
303 GWEN_LOGGER_DOMAIN *ld;
309 return ld->logger->open;
328 if (strlen(lg->logIdent)+32>=
sizeof(buffer)) {
329 fprintf(stderr,
" LOGGER: Logbuffer too small (1).\n");
338 # ifdef HAVE_SNPRINTF
340 i=snprintf(buffer,
sizeof(buffer)-1,
341 "%d:%04d/%02d/%02d %02d-%02d-%02d:%s(%d):",priority,
342 t->tm_year+1900, t->tm_mon+1, t->tm_mday,
343 t->tm_hour, t->tm_min, t->tm_sec,
344 lg->logIdent, (
int)getpid());
346 i=snprintf(buffer,
sizeof(buffer)-1,
347 "%d:%04d/%02d/%02d %02d-%02d-%02d:%s:",priority,
348 t->tm_year+1900, t->tm_mon+1, t->tm_mday,
349 t->tm_hour, t->tm_min, t->tm_sec,
352 if (i>=
sizeof(buffer)) {
353 fprintf(stderr,
" LOGGER: Logbuffer too small (2).\n");
358 sprintf(buffer,
"%d:%04d/%02d/%02d %02d-%02d-%02d:%s(%d):",priority,
359 t->tm_year+1900, t->tm_mon+1, t->tm_mday,
360 t->tm_hour, t->tm_min, t->tm_sec,
361 lg->logIdent, (
int)getpid());
363 sprintf(buffer,
"%d:%04d/%02d/%02d %02d-%02d-%02d:%s:",priority,
364 t->tm_year+1900, t->tm_mon+1, t->tm_mday,
365 t->tm_hour, t->tm_min, t->tm_sec,
370 # ifdef HAVE_SNPRINTF
371 buffer[
sizeof(buffer)-1]=0;
372 i=snprintf(buffer,
sizeof(buffer)-1,
375 if (i>=
sizeof(buffer)) {
376 fprintf(stderr,
" LOGGER: Logbuffer too small (3).\n");
380 sprintf(buffer,
"%d:%s:",priority,
416 if (priority>lg->logLevel)
421 switch(lg->logType) {
429 f=fopen(lg->logFile,
"a+");
432 "LOGGER: Unable to open file \"%s\" (%s)\n",
443 "LOGGER: Unable to write to file \"%s\" (%s)\n",
453 "LOGGER: Unable to close file \"%s\" (%s)\n",
499 if (lg->logFunction==0) {
501 "LOGGER: Logtype is \"Function\", but no function is set.\n");
548 if (priority>lg->logLevel)
556 for (i=0; i<strlen(s)+1; i++) {
633 lg->logIdent=strdup(
id);
635 lg->logIdent=strdup(
"No ident, please adjust your program");
648 lg->logFile=strdup(name);
650 lg->logFile=strdup(
"");
662 oldFn=lg->logFunction;
670 if (strcasecmp(name,
"emergency")==0)
672 else if (strcasecmp(name,
"alert")==0)
674 else if (strcasecmp(name,
"critical")==0)
676 else if (strcasecmp(name,
"error")==0)
678 else if (strcasecmp(name,
"warning")==0)
680 else if (strcasecmp(name,
"notice")==0)
682 else if (strcasecmp(name,
"info")==0)
684 else if (strcasecmp(name,
"debug")==0)
686 else if (strcasecmp(name,
"verbous")==0)
737 if (strcasecmp(name,
"console")==0)
739 else if (strcasecmp(name,
"file")==0)
741 else if (strcasecmp(name,
"syslog")==0)
743 else if (strcasecmp(name,
"function")==0)
void GWEN_Logger_SetDefaultLogger(GWEN_UNUSED GWEN_LOGGER *lg)
void GWEN_Logger_AddLogger(GWEN_LOGGER *oldLogger, GWEN_LOGGER *newLogger)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int GWEN_Gui_LogHook(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s)
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
void GWEN_Logger_Attach(GWEN_LOGGER *lg)
void GWEN_Logger_SetLevel(const char *logDomain, GWEN_LOGGER_LEVEL l)
GWEN_LOGGER_DOMAIN * GWEN_LoggerDomain_Find(const char *name)
void GWENHYWFAR_CB(* GWEN_LOGGERFUNCTIONLOG)(const char *s)
GWEN_LOGGERFUNCTIONLOG GWEN_Logger_SetLogFunction(const char *logDomain, GWEN_LOGGERFUNCTIONLOG fn)
#define GWEN_FREE_OBJECT(varname)
const char * GWEN_Logger_Logtype2Name(GWEN_LOGGER_LOGTYPE lt)
int GWEN_Logger_CreateLogMessage(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf)
int GWEN_Logger_IsEnabled(const char *logDomain)
GWEN_LOGGER_LEVEL GWEN_Logger_Name2Level(const char *name)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
#define GWEN_LIST_DEL(typ, sr, head)
GWEN_LOGGER_DOMAIN * GWEN_LoggerDomain_new(const char *name)
int GWEN_Logger_ModuleFini(void)
GWEN_LOGGER * GWEN_Logger_new(GWEN_LOGGER_DOMAIN *domain)
const char * GWEN_Logger_Level2Name(GWEN_LOGGER_LEVEL level)
int GWEN_Logger__CreateMessage(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s, GWEN_BUFFER *mbuf)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_Logger_Log(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s)
int GWEN_Logger_Exists(const char *logDomain)
void GWEN_Logger_SetFilename(const char *logDomain, const char *name)
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
GWEN_LOGGER * GWEN_LoggerDomain_GetLogger(const char *name)
GWEN_LOGGER_LOGTYPE GWEN_Logger_Name2Logtype(const char *name)
int GWEN_Logger_Open(const char *logDomain, const char *ident, const char *file, GWEN_LOGGER_LOGTYPE logtype, GWEN_LOGGER_FACILITY facility)
#define GWEN_LIST_INSERT(typ, sr, head)
void GWEN_Logger_Enable(const char *logDomain, int f)
void GWEN_Logger_free(GWEN_LOGGER *lg)
int GWEN_Logger_IsOpen(const char *logDomain)
void GWEN_LoggerDomain_Del(GWEN_LOGGER_DOMAIN *ld)
void GWEN_LoggerDomain_free(GWEN_LOGGER_DOMAIN *ld)
int GWEN_Logger__Log(GWEN_LOGGER *lg, GWEN_LOGGER_LEVEL priority, const char *s)
static GWEN_LOGGER_DOMAIN * gwen_loggerdomains
int GWEN_Logger_GetLevel(const char *logDomain)
#define GWEN_LIST_ADD(typ, sr, head)
void GWEN_LoggerDomain_Add(GWEN_LOGGER_DOMAIN *ld)
void GWEN_Logger_Close(const char *logDomain)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
int GWEN_Logger_ModuleInit(void)
void GWEN_Logger_SetIdent(const char *logDomain, const char *id)