Неверное сообщение журнала после переопределения $log

Я пытаюсь украсить ангуляр $log фабрика поставить timestamp сообщения в журнале.

До сих пор работает довольно хорошо, за исключением этого поведения:

Когда я регистрируюсь с конфигурацией по умолчанию angular, я получаю:

сообщение для объекта {имя: "Брайан", сообщение: "был здесь"} третий аргумент

Plunker

После создания декоратора логи стали такими:

["сообщение для", объект, "третий аргумент"]

Плункер - код здесь

Таким образом, Объект не был расширен до консоли, и мне нужно нажать на сообщение, чтобы увидеть полный объект.

Кто-нибудь знает, что мне не хватает? Или знаете лучший способ сделать это и поставить метку времени в начале сообщения?

1 ответ

Решение

Вам нужно расширить argument массив в список аргументов для warn(), Вы можете достичь этого с apply(), Это просто уловка JavaScript.

warn: function () {
    //create a new args. You can't modify arguments since it is controlled by AngularJS
    var args = [new Date()];
    angular.forEach(arguments, function (i) {
        args.push(i);
    })
    $delegate.warn.apply(null, args);
}

$delegate.warn.apply(null, args); оценивает как $delegate.warn(args[0], args[1], ...);,

Другие вопросы по тегам