Squeak.ru - шаблоны программирования

Отключить ведение журнала консоли для определенных объектов

Это как-то напрягает: с тех пор, как я начал использовать MPMoviePlayerController, консоль переполнена информацией из MPAVController. Например:

[MPAVController] Autoplay: _streamLikelyToKeepUp: 1 -> 1
[MPAVController] Autoplay: Disabling autoplay

Это немного раздражает, потому что мне всегда приходится искать собственную зарегистрированную информацию. Есть ли способ отключить ведение журнала для определенных объектов или фреймворков?


Ответы:


1

Я не думаю, что такая фильтрация возможна из коробки. Но можно перенаправить stderr (который используется NSLog) в канал, читать из этого канала в фоновом потоке, а затем печатать сообщения, которые проходят через фильтр, в stdout (который также захватывается отладчиком). Этот код выполняет работу:

int main(int argc, char *argv[])
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^(void) {
        size_t const BUFFER_SIZE = 2048;

        // Create a pipe
        int pipe_in_out[2];
        if (pipe(pipe_in_out) == -1)
            return;

        // Connect the 'in' end of the pipe to the stderr
        if (dup2(pipe_in_out[1], STDERR_FILENO) == -1)
            return;

        char *buffer = malloc(BUFFER_SIZE);
        if (buffer == 0)
            return;

        for (;;)
        {
            // Read from the 'out' end of the pipe
            ssize_t bytes_read = read(pipe_in_out[0], buffer, BUFFER_SIZE);
            if (bytes_read <= 0)
                break;

            // Filter and print to stdout
            if (should_show(buffer)) // TODO: Apply filters here
                fwrite(buffer, 1, bytes_read, stdout);
        }

        free(buffer);
        close(pipe_in_out[1]);
    });

    // Rest of main
}

Обратите внимание, что этот код довольно прост и не обрабатывает все крайние случаи. Прежде всего, он фиксирует весь вывод stderr, а не только NSLog. Возможно, это можно было бы отфильтровать, проверив содержимое. Вывод NSLog всегда начинается с даты и времени.

Вторая проблема с этим кодом заключается в том, что он не пытается разделить/объединить строки, которые он считывает из конвейера. Нет никакой гарантии, что будет один NSLog за чтение. Они могут собираться вместе или быть слишком длинными и будут разделены. Чтобы справиться с этим, потребуется дополнительная обработка данных, считанных из канала.

Во всяком случае, для многих практических целей этого должно быть достаточно.

15.10.2012

2

Вам следует изучить NSLogger. Хотя NSLog не дает вам какой-либо избирательности в отношении того, что вы видите от запуска к запуску, NSLogger может. NSLogger отображает выходные данные устройства (или симулятора) в собственном окне в OS X.

По сути, он добавляет концепцию удобства и уровня на выходе. Мастера Unix могут придраться к этому сравнению, но я вижу, что оно очень похоже на syslog. Средство просмотра NSLogger позволяет отображать выходные сообщения для одного или нескольких объектов (которые вы определяете), которые также соответствуют минимальному требуемому уровню.

Макросы определяют, что вы видите в окне вывода. Вот отрывок:

#ifdef DEBUG
    #define LOG_GENERAL(level, ...)    LogMessageF(__FILE__,__LINE__,__FUNCTION__,@"general",level,__VA_ARGS__)
#else
    #define LOG_GENERAL(...)    do{}while(0)
#endif

Когда DEBUG выключен, сообщения не появляются. Когда включено, если в коде есть оператор LOG_GENERAL(), и ваше средство просмотра настроено на отображение объекта «общий», а ваш уровень достаточен для отображения, вы получите сообщение.

Он невероятно гибкий, и мне это очень нравится. Добавление в проект занимает около пяти минут. Пожалуйста, взгляните на страницу github, указанную выше, для получения полной информации и загрузки.

(Это не решит проблему, когда MPAVController заполняет консоль сообщениями, но помещает нужные сообщения в новое окно, что значительно упрощает контроль, фильтрацию и интерпретацию того, что вас интересует.)

15.10.2012
  • Спасибо, это приятно. Может пригодиться в будущем. 15.10.2012

  • 3

    Другой вариант, если вы можете его использовать, — запустить либо симулятор, либо устройство под управлением iOS ‹ 6.0.

    Сообщения журнала MPAVController не появляются у меня при использовании устройства 5.0 или симулятора 5.1. Но они точно появятся в Симуляторе 6.0.

    Конечно, обычно следует использовать текущую ОС, но если вы работаете над частью проекта, где много видео, запуск более раннего симулятора или устройства во время работы над этим конкретным набором задач — это способ облегчить эту головную боль при регистрации.

    Это также обеспечивает некоторое тестирование обратной совместимости в качестве бонуса.

    11.12.2012
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...