Я добавил собственный регистратор в команду сборки 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 * в выходных данных файла журнала?