-
Notifications
You must be signed in to change notification settings - Fork 5
Logger
#include "logger.ts"
В движке создается один экземпляр Logger
. Доступен по akra.logger
.
enum ELogLevel {
NONE = 0x0000, //не выводить в лог ничего
LOG = 0x0001, //в лог выводиться только сообщения продуцируемые функцией logger.log
INFORMATION = 0x0002, //logger.info
WARNING = 0x0004, //logger.warning
ERROR = 0x0008, //logger.error
CRITICAL = 0x0010, //logger.critical_error и logger.assert
ALL = 0x001F //выводить все
}
logger.setLogLevel(ELogLevel.WARNING | ELogLevel.ERROR | ELogLevel.CRIICAL);
При таком уровне лога как в примере, сообщения выводимые функцией log
и info
выводиться не будут
log(...pArgs: any[]);
info(pEntity: ILoggerEntity): void;
info(eCode: uint, ...pArgs: any[]): void;
info(...pArgs: any[]): void;
warning(pEntity: ILoggerEntity): void;
warning(eCode: uint, ...pArgs: any[]): void;
warning(...pArgs: any[]): void;
error(pEntity: ILoggerEntity): void;
error(eCode: uint, ...pArgs: any[]): void;
error(...pArgs: any[]): void;
/**
* в независимости от уровня лога выводит alert с предупреждением и продуцирует ошибку.
* Если установлен уровень CRITICAL, то выведет в лог сообщение об ошибке.
*/
criticalError(pEntity: ILoggerEntity): void;
criticalError(eCode: uint, ...pArgs: any[]): void;
criticalError(...pArgs: any[]):void;
/**
* Если bCondition ложно, работает как critical_error,
* с той разницей, что ошибка продуцируется по желанию пользователя.
*/
assert(bCondition: bool, pEntity: ILoggerEntity): void;
assert(bCondition: bool, eCode: uint, ...pArgs: any[]): void;
assert(bCondition: bool, ...pArgs: any[]):void;
У Logger-а можно регистрировать диапазон кодов, и задать ему имя. Ко всем кодам из данного диапазона можно применять свои собственные правила вывода ошибок. Если функции вывода не определена, то будет использована стандартная.
logger.registerCodeFamily(0, 100, "SystemCodes");
logger.registerCodeFamily(2000, 2199, "ParserSyntaxErrors");
logger.registerCodeFamily(2200, 2500, "EffectSyntaxErrors");
Можно определять свои функции вывода ошибок. На каждое семейство ошибок и на каждый уровень лога можно определить свою функцию.
interface ILogRoutineFunc {
(pEntity: ILoggerEntity): void;
}
На вход она всегда получает параметр типа ILoggerEntity
:
interface ILoggerEntity {
code: uint; //код сообщения
location: ISourceLocation; // где произошла. {file: string; line: uint}
message?: string; // сообщение
info: any; // дополнительная информация об ошибке
}
//Глобально для всех кодов
setLogRoutine(fnLogRoutine: ILogRoutineFunc, eLevel: ELogLevel): void;
//Только для семейства кодов
setCodeFamilyRoutine(eCodeFromFamily: uint, fnLogRoutine: ILogRoutineFunc, eLevel: ELogLevel): bool;
setCodeFamilyRoutine(sFamilyName: string, fnLogRoutine: ILogRoutineFunc, eLevel: ELogLevel): bool;
logger.setLogRoutine(logRoutine, ELogLevel.LOG |
ELogLevel.INFORMATION);
logger.setCodeFamilyRoutine("ParserSyntaxErrors", syntaxErrorLogRoutine, ELogLevel.ERROR);
registerCode(eCode: uint, sMessage?: string): bool;
logger.registerCode(2202, "Grammar error. Empty additional function name.");
В движке определены следующие макросы: LOG
, ERROR
, WARNING
, INFO
, CRITICAL
, CRITICAL_ERROR
, assert
.
Используя их в поле location
у ILoggerEntity
окажется файл и строка в которых был использован этот макрос.