Ios 在Cocoa伐木工人日志中包含“self”

Ios 在Cocoa伐木工人日志中包含“self”,ios,objective-c,cocoalumberjack,Ios,Objective C,Cocoalumberjack,在每个登录消息中包含self的最佳方式是什么 我尝试的是: 实现DDLogFormatter协议-日志消息的调用者在formatLogMessage:方法中不可用 #定义如下内容: #define LogInfo(frmt,…)DDLogInfo([NSString stringWithFormat:@“%@:%@”,self,frmt]),###VA(u ARGS)(请注意[NSString…]周围的额外()-谢谢 当我想弱引用self时,这会产生问题,例如在块内调用LogInfo——包括s

在每个登录消息中包含
self
的最佳方式是什么

我尝试的是:

  • 实现
    DDLogFormatter
    协议-日志消息的调用者在
    formatLogMessage:
    方法中不可用
  • #定义如下内容:

    #define LogInfo(frmt,…)DDLogInfo([NSString stringWithFormat:@“%@:%@”,self,frmt]),###VA(u ARGS)
    (请注意
    [NSString…]周围的额外
    ()
    -谢谢

    当我想弱引用
    self
    时,这会产生问题,例如在块内调用
    LogInfo
    ——包括
    self
    可能会导致内存问题


我还缺少什么?还有其他更好的日志库吗?

如果在
[…]
周围放置一个额外的
()
,那么第二个日志库应该可以工作。这样可以工作,你能解释一下为什么额外的
()
有帮助吗?C预处理器无法识别
[]
作为括号,括号内的逗号将其混淆,认为它是三个独立的宏参数。在块中使用该宏时要非常小心——这会创建对self的隐藏强引用,在某些情况下会创建一个retain循环。当我做了类似的事情后,我会创建第二个记录宏,它接受一个对象arGUnit显式,因此,如果需要,您可以传入一个weakSelf。使用自定义宏,如果您想在格式化程序中执行某些特殊操作,您可能可以将对象作为标记传递,并可以通过一个特殊的上下文值来知道它是日志记录对象。