Когда занимаешься разработкой и имеешь дело с тоннами отладочной информации, то невольно можно захотеть, чтобы эта информация выглядела красиво)
При разработке HTML5 проектов вся инфа отображается в консоли браузера и выводиться js командой console.log(‘some text’); Например в браузере Chrome эту консоль можно открыть нажав F12 и открыв вкладку Console и по умолчанию это выглядит так:

И всё бы ладно, но я увидел красочную (да ещё и с ссылками!) надпись которой Phaser выводит свою версию и захотел так же!)
После некоторого времени поиска инфы и написания кода у меня получился довольно удобный log-менеджер для проектов на Phaser+TypeScript! Вот как красиво получилось в итоге:

И выводится это простым кодом:
LogMng.system('Created by MonaxGames studio', 'http://monaxgames.com');
LogMng.info('some info for me');
LogMng.debug('простой дебаг');
LogMng.warn('wow wow easy!');
LogMng.error('everything is lost!');
LogMng.net('фиолетовенький для разнообразия)');
Вот весь листинг кода класса менеджера:
namespace LogMng {
export const MODE_DEBUG = 'MODE_DEBUG';
export const MODE_RELEASE = 'MODE_RELEASE';
const DEBUG = 'DEBUG';
const INFO = 'INFO';
const NETWORK = 'NETWORK';
const WARNING = 'WARNING';
const ERROR = 'ERROR';
// current mode
var mode: string = MODE_DEBUG;
// available levels
var levels: Array<string> = [DEBUG, INFO, NETWORK, WARNING, ERROR];
export function setMode(aMode: string) {
switch (aMode) {
case MODE_DEBUG:
levels = [DEBUG, INFO, NETWORK, WARNING, ERROR];
break;
case MODE_RELEASE:
levels = [WARNING, ERROR];
break;
}
}
export function getMode(): string {
return mode;
}
function getCSS(bgColor: string): string {
return 'background: ' + bgColor + ';' +
'background-repeat: no-repeat;' +
'color: #1df9a8;' +
'line-height: 16px;' +
'padding: 1px 0;' +
'margin: 0;' +
'user-select: none;' +
'-webkit-user-select: none;' +
'-moz-user-select: none;';
};
function getLink(color: string): string {
return 'background: ' + color + ';' +
'background-repeat: no-repeat;' +
'font-size: 12px;' +
'color: #446d96;' +
'line-height: 14px';
};
function log(aMsg: string, aLevel: string = DEBUG) {
if (levels.indexOf(aLevel) < 0)
return;
var css = '';
switch (aLevel) {
case INFO:
css = 'background: #308AE4; color: #fff; padding: 1px 4px';
break;
case WARNING:
css = 'background: #f7a148; color: #fff; padding: 1px 4px';
break;
case ERROR:
css = 'background: #DB5252; color: #fff; padding: 1px 4px';
break;
case NETWORK:
css = 'background: #7D2998; color: #fff; padding: 1px 4px';
break;
case DEBUG:
default:
css = 'background: #ADADAD; color: #fff; padding: 1px 4px';
}
console.log("%c%s", css, aLevel, aMsg);
};
export function system(aMsg: string, aLink: string = '') {
console.log("%c %c %c %s %c %c %c %c%s",
getCSS('#5C6166'), getCSS('#4F5357'),
getCSS('#313335'), aMsg,
getCSS('#4F5357'), getCSS('#5C6166'),
getLink('none'), getLink('none'), aLink
);
}
export function debug(aMsg: string) {
log(aMsg, DEBUG);
}
export function info(aMsg: string) {
log(aMsg, INFO);
}
export function net(aMsg: string) {
log(aMsg, NETWORK);
}
export function warn(aMsg: string) {
log(aMsg, WARNING);
}
export function error(aMsg: string) {
log(aMsg, ERROR);
}
}
Ещё из примечательных особенностей стоит отметить возможность указывать Mode логирования, что позволяет легко переключать уровни логирования при старте приложения. Например вы хотите компилить релизную версию и для этого нужно убрать весь выводимый дебаг и прочую ненужную для неокрепшего мозга игрока информацию. Для этого при старте делаем настройки лога вот так:
// LogMng settings
LogMng.setMode(LogMng.MODE_RELEASE);
LogMng.system('current log mode: ' + LogMng.getMode());
И всё, ненужные в релизе типы сообщений (debug, info, net) больше не выводятся.
Этот менеджер уже входит в мой шаблон для проектов на Phaser+TypeScript под VisualStudio и свободно доступен на GitHub, и там же пример его использования в файле Boot.ts, налетай!)
Красочных дебагов всем!)