Swift中的CocoaLumberjack,如何打印行号和filne名称

我是CocoaLumberjack的新手,我接着在Swift上工作。 如果我尝试打印日志:

DDLogDebug("Debug") DDLogInfo("Info") DDLogWarn("Warning") DDLogVerbose("Verbose") DDLogError("Error") 

一切正常,我打印所有级别,因为我的defaultDebugLevel是DDLogLevel.Verbose。

但我找不到/找出如何用日志打印行或文件名。 任何想法?

非常感谢!!

经过一些研究后,我发现你必须创建一个日志格式化程序,这个日志格式化程序是DDDispatchQueueLogFormatter的子类,你必须覆盖一个接收DDLogMessage并返回一个String的函数,例如:

 import Foundation import CocoaLumberjack.DDDispatchQueueLogFormatter class LogFormatter: DDDispatchQueueLogFormatter { let dateFormatter: NSDateFormatter override init() { dateFormatter = NSDateFormatter() dateFormatter.formatterBehavior = .Behavior10_4 dateFormatter.dateFormat = "HH:mm" super.init() } override func formatLogMessage(logMessage: DDLogMessage!) -> String { let dateAndTime = dateFormatter.stringFromDate(logMessage.timestamp) return "\(dateAndTime) [\(logMessage.fileName):\(logMessage.line)]: \(logMessage.message)" } } 

然后你只需要在你的AppDelegate或你设置CocaLumberJack的地方添加这样的格式化程序:

 DDTTYLogger.sharedInstance().logFormatter = LogFormatter() 

希望它可以帮到某人!

CocoaLumberjack (3.1.0)更新CocoaLumberjack (3.1.0)

import CocoaLumberjack.DDLog

 class LogFormatter: NSObject, DDLogFormatter { let dateFormatter: DateFormatter override init() { dateFormatter = DateFormatter() dateFormatter.formatterBehavior = .behavior10_4 dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss:SSS" super.init() } func format(message logMessage: DDLogMessage) -> String? { let dateAndTime = dateFormatter.string(from: logMessage.timestamp) return "\(dateAndTime) [\(logMessage.fileName):\(logMessage.line)]: \(logMessage.message)" } } 

DDTTYLogger.sharedInstance.logFormatter = LogFormatter()

Andres的答案更新为Swift 3(由Hugh进行日期时间格式的微调)

 import Foundation import CocoaLumberjack.DDDispatchQueueLogFormatter class LogFormatter: DDDispatchQueueLogFormatter { let dateFormatter: DateFormatter override init() { dateFormatter = DateFormatter() dateFormatter.formatterBehavior = .behavior10_4 dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss:SSS" super.init() } override func format(message: DDLogMessage!) -> String { let dateAndTime = dateFormatter.string(from: message.timestamp) return "\(dateAndTime) [\(message.fileName!) \(message.function!):\(message.line)] \(message.message ?? "")" } } 
 #import "CustomFormatter.h" @implementation CustomFormatter : NSObject - (NSString *)formatLogMessage:(DDLogMessage *)logMessage { NSString *logLevel; switch (logMessage->_flag) { case DDLogFlagError : logLevel = @"[E]"; break; case DDLogFlagWarning : logLevel = @"[W]"; break; case DDLogFlagInfo : logLevel = @"[I]"; break; case DDLogFlagDebug : logLevel = @"[D]"; break; default : logLevel = @"[V]"; break; } return [NSString stringWithFormat:@"%@:%lu %@ | %@ ", logMessage->_fileName, (unsigned long)logMessage->_line, logLevel, logMessage->_message]; } @end