Используйте разные журналы в ваф - PullRequest
1 голос
/ 21 марта 2019

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

Но я хочу, чтобы на терминале печатался normal waf logger, и вывод обычного + custom logger для записи в файл журнала. Это возможно? Проблема в том, что вывод normal в большинстве случаев достаточен, а добавленное многословие пользовательского регистратора значительно замедляет сборку.

#!/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>\n\nint 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']

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

...