#include #include "fcntl.h" #include "stdarg.h" #include "errno.h" #include "time.h" #include "unistd.h" #include "stdio.h" #include "string.h" #include "logger.h" Logger __logger; static char *colours[5] = { "[\x1b[36mDebug\x1b[37m]", "[\x1b[32mInfo\x1b[37m]", "[\x1b[35mWarn\x1b[37m]", "[\x1b[33mError\x1b[37m]", "[\x1b[31mFatal\x1b[37m]", }; Size logger_init( void ) { String logfile[512]; snprintf(logfile, 512, "%s/%s", getenv("HOME"), ".engine33.log"); __logger.fd = open(logfile, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH ); if( __logger.fd < 0 ) { printf( "Unable to initialize logger. Exiting." ); return E33_EXIT_FAILURE; } __logger.func = 0; dprintf( __logger.fd, "\033[3J\033[1;1HWelcome to Engine33!\r\n\r\n" ); return E33_EXIT_SUCCESS; } void logger_term( void ) { dprintf( __logger.fd, "\r\n\r\nGoodbye!" ); close( __logger.fd ); } void logger( Size level, const char *fmt, ... ) { time_t currentTime; struct tm *m_time; va_list args; va_start(args, fmt); time(¤tTime); m_time = localtime(¤tTime); dprintf( __logger.fd, "Engine33 [%02d:%02d:%02d] -", m_time->tm_hour, m_time->tm_min, m_time->tm_sec ); dprintf( __logger.fd, " %s ", colours[level] ); vdprintf(__logger.fd, fmt, args); if( (level > LOG_INFO) && errno ) { dprintf( __logger.fd, ". Reason: %s", strerror(errno) ); errno = 0; } dprintf( __logger.fd, ".\r\n" ); va_end(args); }