X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Flogging.c;h=1895b5b50fd912213a92645b1a6b8db5657ef0cc;hb=f5ee3595addf2954bbbd5dcb9d7de72b069750e7;hp=567f64e3387da152729aec2406a2226e85581fee;hpb=bd8dc898108f10c0498f4dc5d0164a50b5ff2e5c;p=tpg%2Facess2.git diff --git a/Kernel/logging.c b/Kernel/logging.c index 567f64e3..1895b5b5 100644 --- a/Kernel/logging.c +++ b/Kernel/logging.c @@ -21,7 +21,11 @@ enum eLogLevels LOG_LEVEL_DEBUG, NUM_LOG_LEVELS }; -const char csaLevelCodes[] = {'k','p','f','e','w','n','l','d'}; +const char *csaLevelColours[] = { + "\x1B[35m", "\x1B[34m", "\x1B[36m", "\x1B[31m", + "\x1B[33m", "\x1B[32m", "\x1B[0m", "\x1B[0m" + }; +const char *csaLevelCodes[] = {"k","p","f","e","w","n","l","d"}; // === TYPES === typedef struct sLogEntry @@ -29,9 +33,9 @@ typedef struct sLogEntry struct sLogEntry *Next; struct sLogEntry *LevelNext; Sint64 Time; - Uint64 Ident; int Level; int Length; + char Ident[9]; char Data[]; } tLogEntry; typedef struct sLogList @@ -47,13 +51,21 @@ void Log_KernelPanic(char *Ident, char *Message, ...); void Log_Panic(char *Ident, char *Message, ...); void Log_Error(char *Ident, char *Message, ...); void Log_Warning(char *Ident, char *Message, ...); -void Log_Log(char *Ident, char *Message, ...); void Log_Notice(char *Ident, char *Message, ...); +void Log_Log(char *Ident, char *Message, ...); void Log_Debug(char *Ident, char *Message, ...); -static Uint64 Log_Int_GetIdent(const char *Str); + +// === EXPORTS === +EXPORT(Log_Panic); +EXPORT(Log_Error); +EXPORT(Log_Warning); +EXPORT(Log_Notice); +EXPORT(Log_Log); +EXPORT(Log_Debug); // === GLOBALS === tSpinlock glLog; +tSpinlock glLogOutput; tLogList gLog; tLogList gLog_Levels[NUM_LOG_LEVELS]; @@ -65,19 +77,25 @@ void Log_AddEvent(char *Ident, int Level, char *Format, va_list Args) { int len; tLogEntry *ent; - Uint64 ident = Log_Int_GetIdent(Ident); + va_list args_tmp; if( Level >= NUM_LOG_LEVELS ) return; - len = vsnprintf(NULL, 256, Format, Args); + va_copy(args_tmp, Args); + len = vsnprintf(NULL, 256, Format, args_tmp); + + //Log("len = %i", len); ent = malloc(sizeof(tLogEntry)+len+1); ent->Time = now(); - ent->Ident = ident; + strncpy(ent->Ident, Ident, 8); ent->Level = Level; ent->Length = len; vsnprintf( ent->Data, 256, Format, Args ); + //Log("ent->Ident = '%s'", ent->Ident); + //Log("ent->Data = '%s'", ent->Data); + LOCK( &glLog ); ent->Next = gLog.Tail; @@ -105,12 +123,15 @@ void Log_AddEvent(char *Ident, int Level, char *Format, va_list Args) */ void Log_Int_PrintMessage(tLogEntry *Entry) { - LogF("%018%c [%8s] %s\n", + //LOCK( &glLogOutput ); + LogF("%s%014lli%s [%+8s] %s\x1B[0m\r\n", + csaLevelColours[Entry->Level], Entry->Time, csaLevelCodes[Entry->Level], - &Entry->Ident, + Entry->Ident, Entry->Data ); + //RELEASE( &glLogOutput ); } /** @@ -190,30 +211,3 @@ void Log_Debug(char *Ident, char *Message, ...) Log_AddEvent(Ident, LOG_LEVEL_DEBUG, Message, args); va_end(args); } - -/** - * \brief Converts a string into a 64-bit ident - */ -static Uint64 Log_Int_GetIdent(const char *Str) -{ - Uint64 ret = 0; - int i; - char ch; - - for( i = 0; Str[i] && i < 7; i++ ) - { - ch = Str[i]; - - if(ch < ' ') - ch = '?'; - else if(ch > '~') - ch = '?'; - - ret |= (Uint64)ch << 8*i; - } - - for( ; i < 7; i++ ) - ret |= 0x20 << (8*i); - - return ret; -}