Используйте разные журналы в waf

#waf

#waf

Вопрос:

Я добавил пользовательский регистратор в команду сборки waf, как показано ниже. Результат этого wscript показан ниже.

Но я хочу, чтобы на терминале печатался обычный waf-регистратор, а выходные данные обычного пользовательского регистратора записывались в файл журнала. Возможно ли это? Проблема в том, что в большинстве случаев достаточно обычного вывода, а дополнительная детализация пользовательским регистратором довольно сильно замедляет сборку.

 #!/usr/bin/env python
# -*- encoding: utf-8 -*-

top = '.'
out = 'build'

VERSION = '0.0.0'
APPNAME = 'app'

from waflib import Configure, Logs
import logging

Configure.autoconfig = True

def options(opt):
    opt.load('compiler_c')

def configure(conf):
    conf.load('compiler_c')
    conf.path.make_node('main.c').write(
        '#include <stdio.h>nnint main(int argc, char* argv[]) {n    return 0;n}n')

def build(bld):
    import sys
    import os
    log_file = os.path.join(out, 'build.log')
    bld.logger = Logs.make_logger(log_file, out)
    hdlr = logging.StreamHandler(sys.stdout)
    formatter = logging.Formatter('%(message)s')
    hdlr.setFormatter(formatter)
    bld.logger.addHandler(hdlr)
    bld.program(target='app', source='main.c')
  

Полученный результат выглядит следующим образом:

 $ python waf
Configuring the project
Setting top to                           : /cygdrive/d/log
Setting out to                           : /cygdrive/d/log/build
Checking for 'gcc' (C compiler)          : /usr/bin/gcc
Waf: Entering directory `/cygdrive/d/log/build'
[1/2] Compiling main.c

['/usr/bin/gcc', '../main.c', '-c', '-o/cygdrive/d/log/build/main.c.1.o']
[2/2] Linking build/app.exe

['/usr/bin/gcc', '-Wl,--enable-auto-import', 'main.c.1.o', '-o/cygdrive/d/log/build/app.exe', '-Wl,-Bstatic', '-Wl,-Bdynamic']
Waf: Leaving directory `/cygdrive/d/log/build'
'build' finished successfully (0.473s)
  

Что мне нужно, так это вывод терминала, подобный этому:

 [1/2] Compiling main.c
[2/2] Linking build/app.exe
  

и выводите файл журнала следующим образом:

 [1/2] Compiling [32mmain.c[0m

['/usr/bin/gcc', '../main.c', '-c', '-o/cygdrive/d/log/build/main.c.1.o']
[2/2] Linking [33mbuild/app.exe[0m

['/usr/bin/gcc', '-Wl,--enable-auto-import', 'main.c.1.o', '-o/cygdrive/d/log/build/app.exe', '-Wl,-Bstatic', '-Wl,-Bdynamic']
  

Бонус: Как можно удалить непечатаемые символы только из выходного файла журнала?