我已经创建了一个MyLogger类,它将参数传递给XCGLogger以输出日志。我为XCGLogger的showFileName和dateshowFunctionName指定了showFileName,但它总是输出MyLogger自己的文件名和方法名。有没有办法让它输出调用者的文件名和方法名?
这就是现在的输出。
2022/06/17,11:44:54.054 [Debug] [MyLogger.swift] logWrite(level:message:) > New user is comming.
2022/06/17,11:44:54.054 [Warning] [MyLogger.swift] logWrite(level:message:) > Invaild login_name or password. [login_name:marverick] failed 1 times.
2022/06/17,11:44:58.058 [Info] [MyLogger.swift] logWrite(level:message:) > Login success. Hello maverick!我想要的是这个。
2022/06/17,11:44:54.054 [Debug] [Login.swift] top() > New user is comming.
2022/06/17,11:44:54.054 [Warning] [Auth.swift] authCheck(login_name:password:) > Invaild login_name or password. [login_name:marverick] failed 1 times.
2022/06/17,11:44:58.058 [Info] [Main.swift] main(param:) > Login success. Hello maverick!我的密码是这个。它似乎有点长,但我不知道是什么原因造成的问题,所以我没有缩写太多。
import Foundation
import SSZipArchive
import XCGLogger
publc class MyLogger: NSObject, URLSessionTaskDelegate {
static public func logWrite(level: LOGLEVEL, message:String) {
let logSetUp = settings.logger()
let fileName = createFileName()
let log = XCGLogger.default
do {
let folderName = FileManager.default.urls(for:.libraryDirectory,in:.userDomainMask).first?.appendingPathComponent("Logs",isDirectory:true)
try FileManager.default.createDirectory(at: folderName!, withIntermediateDirectories: true, attributes: nil)
}
catch{
MyLogger.logWrite(level: .ERROR, message: error.localizedDescription)
}
let path = FileManager.default.urls(for: .libraryDirectory,in: .userDomainMask).first?.appendingPathComponent("Logs", isDirectory: false).appendingPathComponent(fileName + ".log")
log.dateFormatter?.dateFormat = logSetUp.dateformat
let autorotateFileDestination = AutoRotatingFileDestination(writeToFile: path, identifier: log.identifier, shouldAppend: logSetUp.shouldappend, maxTimeInterval: logSetUp.targetmaxtimeinterval, targetMaxLogFiles: logSetUp.targetmaxlogfiles)
autorotateFileDestination.showLogIdentifier = logSetUp.showlogidentifier
autorotateFileDestination.showFunctionName = logSetUp.showfunctionname
autorotateFileDestination.showThreadName = logSetUp.showthreadname
autorotateFileDestination.showLevel = logSetUp.showlevel
autorotateFileDestination.showFileName = logSetUp.showfilenames
autorotateFileDestination.showLineNumber = logSetUp.showlinenumbers
autorotateFileDestination.showDate = logSetUp.showdata
log.add(destination: autorotateFileDestination)
switch level {
case .DEBUG:
log.debug(message)
case .INFO:
log.info(message)
case .WARNING:
log.warning(message)
case .ERROR:
log.error(message)
}
}
//other methods here
}发布于 2022-08-18 09:18:10
我没有得到答案,但这段代码给了我预期的结果。我从#file、#line和#function参数中获取调用者的信息,并将其添加为字符串。
import Foundation
import SSZipArchive
import XCGLogger
publc class MyLogger: NSObject, URLSessionTaskDelegate {
static public func logWrite(level: LOGLEVEL, message:String, file: String = #file, line: Int = #line, function: String = #function) {
//
// no change here
//
let callerFileName :String = String(file.split(separator: "/").last ?? "")
let customMessage = "[\(callerFileName):\(line)] \(function) >> \(message)"
switch level {
case .DEBUG:
log.debug(customMessage)
case .INFO:
log.info(customMessage)
case .WARNING:
log.warning(customMessage)
case .ERROR:
log.error(customMessage)
}
}
//other methods here
}https://stackoverflow.com/questions/72864304
复制相似问题