【问题标题】:Overriding NSLog for project and third parties覆盖项目和第三方的 NSLog
【发布时间】:2021-12-06 12:06:11
【问题描述】:

我正在尝试为整个项目和第三方覆盖 NSLog 方法以添加一些逻辑,例如 - 如果记录的消息中包含字符串“dog”,则将其替换为狗表情符号,然后继续。

有没有办法覆盖该方法,这样我使用的第三方也会受到影响?

是否有不同的方法来捕获控制台输出、修改它然后才打印它?

谢谢!

【问题讨论】:

  • 不可能。更好地使用允许您注入自己的记录器的框架。

标签: ios objective-c console nslog


【解决方案1】:

这里是怎么做的。

#define NSLog(...) CustomLogger(__VA_ARGS__);

void CustomLogger(NSString *format, ...) {
    va_list argumentList;
    va_start(argumentList, format);
    NSMutableString *message = [[NSMutableString alloc] initWithFormat:format arguments:argumentList];
    
    NSRange dogRange = [message rangeOfString:@"dog"];
    if (dogRange.location != NSNotFound) {
        [message replaceCharactersInRange:dogRange withString:@"?"];
    }
    
    NSLogv(message, argumentList);

    va_end(argumentList);
}

【讨论】:

  • 这段代码应该在程序中的什么位置影响所有的框架?
  • 是的,只要确保在导入框架的地方导入包含此代码的文件
猜你喜欢
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多