如何优化targets包tar_make()的日志输出?过滤冗余内容
处理targets工作流构建日志的实用方法
针对你用capture.output()记录tar_make()输出时遇到的警告干扰、进度字符冗余问题,给你几个更靠谱的解决办法:
直接用targets内置的文件日志Reporter
targets自带专门的日志输出工具,不用自己手动捕获。调用tar_make(reporter = tar_reporter_log(file = "build_log.txt"))就行,这个Reporter会自动把带时间戳的构建关键信息写入指定文件,自动过滤掉-\|/这类进度动画,而且默认不会混入包版本警告,日志内容干净整洁。把警告和构建日志分开存储
如果需要保留警告但不想和构建日志混在一起,可以单独把警告重定向到另一个文件:# 先设置警告实时输出 options(warn = 1) # 把警告信息写入单独文件 sink("warnings_log.txt", type = "message") # 执行构建并写入主日志 tar_make(reporter = tar_reporter_log(file = "build_log.txt")) # 恢复默认输出设置 sink(type = "message") options(warn = 0)这样构建日志和警告日志完全分离,后续查看更清晰。
自定义Reporter精准过滤内容
如果需要更灵活的控制(比如只保留特定类型的信息),可以自定义一个Reporter类,过滤掉不需要的输出:# 基于timestamp_positives扩展自定义Reporter CustomReporter <- R6::R6Class( "CustomReporter", inherit = targets::tar_reporter_timestamp_positives, public = list( # 忽略警告输出 warn = function(message) { invisible() }, # 过滤进度动画字符 message = function(message) { if (!grepl("^[-\\|/]$", message)) { super$message(message) } } ) ) # 使用自定义Reporter并写入文件 sink("custom_build_log.txt") tar_make(reporter = CustomReporter$new()) sink()
内容的提问来源于stack exchange,提问作者Karsten W.
相关产品推荐
相关产品推荐

