TestsTested | ✗ |
LangLanguage | SwiftSwift |
License | MIT |
ReleasedLast Release | Dec 2017 |
SwiftSwift Version | 4.0 |
SPMSupports SPM | ✗ |
Maintained by Hemang Shah.
With each of the type, it will print a particular emoji and titles which will help you to easily identify what's exactly the log is. Moreover, it will looks cool too.
1.Manually - Add Printer folder to your Project. All set. If you don't want PrinterViewController only add Printer.swift
.
2.CocoaPods:
source 'https://github.com/CocoaPods/Specs.git'
target 'Sample' do
use_frameworks!
pod 'printer-logger', '~>1.3'
end
3.Carthage [Coming soon]. Reference
You can read the CHANGELOG file for a particular release.
Printer has a singleton, you should always use it with it's singleton.
Printer.log.show(id: "001", details: "This is a Success message.", logType: .success)
See the output. Isn't it cool?
[✅ Success] [⌚04-27-2017 10:39:26] [🆔 101] ➞ ✹✹This is a Success message.✹✹
So here are other options you can do with Printer.
Printer.log.show(id: "002", details: "This is a Error message.", logType: .error)
Printer.log.show(id: "003", details: "This is an Information message.", logType: .information)
Printer.log.show(id: "004", details: "This is a Warning message.", logType: .warning)
Printer.log.show(id: "005", details: "This is an Alert message.", logType: .alert)
Output:
[❌ Error] [⌚04-27-2017 10:41:39] [🆔 102] ➞ ✹✹This is a Error message.✹✹
[🚧 Warning] [⌚04-27-2017 10:41:39] [🆔 103] ➞ ✹✹This is a Warning message.✹✹
[📣 Information] [⌚04-27-2017 10:41:39] [🆔 104] ➞ ✹✹This is an Information message.✹✹
[🚨 Alert] [⌚04-27-2017 10:41:39] [🆔 105] ➞ ✹✹This is an Alert message.✹✹
Don't want to specify the logType everytime? No problem, we have function for that too.
Printer.log.success(id: "101", details: "This is a Success message. No need to specify logType.")
Printer.log.error(id: "102", details: "This is an Error message. No need to specify logType.")
Printer.log.warning(id: "103", details: "This is a Warning message. No need to specify logType.")
Printer.log.information(id: "104", details: "This is an Information message. No need to specify logType.")
Printer.log.alert(id: "105", details: "This is an Alert message. No need to specify logType.")
Don't want to specify IDs? We have taken care about that too.
Printer.log.success(details: "This is a Success message without ID.")
Printer.log.error(details: "This is an Error message without ID.")
Printer.log.warning(details: "This is a Warning message without ID.")
Printer.log.information(details: "This is an Information message without ID.")
Printer.log.alert(details: "This is an Alert message without ID.")
We have overrided the 'show' function.
Printer.log.show(details: "This is a Success message.", logType: .success)
Printer.log.show(details: "This is an Alert message.", logType: .alert)
Show a future log.
Printer.log.showInFuture(id: "006", details: "This is a future Success message.", logType: .success, afterSeconds: 3)
This will print a log after specified seconds. In this case, success log after three (3) seconds.
Don't like this the fancy logs? No worries, we have a plain log option.
DEFAULT:
false
IMPORTANT: Should be call in advance.
Printer.log.plainLog = true
Exmaple when plainLog
is set to true
.
[04-27-2017 10:50:30] ID ➞ 001 Details ➞ This is a Success message.
[04-27-2017 10:50:30] ID ➞ 002 Details ➞ This is a Error message.
[04-27-2017 10:50:30] ID ➞ 003 Details ➞ This is an Information message.
[04-27-2017 10:50:30] ID ➞ 004 Details ➞ This is a Warning message.
[04-27-2017 10:50:30] ID ➞ 005 Details ➞ This is an Alert message.
We have a new.plain
type added with show() function.
Printer.log.show(id: "001", details: "This is a Plain message.", logType: .plain)
This is useful when you only want few plain logs.
IMPORTANT: Any properties you're setting should be set in advance or before printing any logs to get the exact effect.
SUGGESTION: You can always set all the properties to customize the Printer in
AppDelegate.swift
file,
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
//set the properties and call the specific function as per the need.
//Printer.log.plainLog = true
Printer.log.addLineAfterEachPrint = true
Printer.log.capitalizeTitles = true
Printer.log.capitalizeDetails = true
Printer.log.printOnlyIfDebugMode = true
//Applied filters to only print success and alert type logs.
//Printer.log.filterLogs = [.success, .alert]
Printer.log.onLogCompletion = { (log) in
//print(log)
//print(log.0)
}
//Printer.log.hideTitles()
//Printer.log.hideEmojis()
return true
}
This will set the properties globally and will be available for the entire app life cycle.
Want to print file name, function name and line number?
IMPORTANT: Should be call everytime when you want to print a trace.
Printer.log.trace()
Printer.Trace ➞ [05-02-2017 14:58:38] ViewController.swift ➞ viewDidLoad() #40
DEFAULT:
true
IMPORTANT:keepAutoTracing
should set totrue
before logging.
This would print same trace as if you call trace(). If you don't like it, just set keepAutoTracing
to false
.
Want to print all the logs for a different use case?
IMPORTANT:
keepTracking
should set totrue
before logging. Even ifkeepAutoTracing
is set tofalse
if you passesshowTrace
totrue
, you will see the traced info. This is helpful if you don't want to trace while logging.
Printer.log.all(showTrace: true)
[All Logs] [Success] [05-15-2017 14:28:03] Id:001 Details:This is a Success message.
[Trace] ➞ ViewController.swift ➞ viewDidLoad() #58
[All Logs] [Error] [05-15-2017 14:28:03] Id:002 Details:This is a Error message.
[Trace] ➞ ViewController.swift ➞ viewDidLoad() #59
[All Logs] [Information] [05-15-2017 14:28:03] Id:003 Details:This is an Information message.
[Trace] ➞ ViewController.swift ➞ viewDidLoad() #60
[All Logs] [Warning] [05-15-2017 14:28:03] Id:004 Details:This is a Warning message.
[Trace] ➞ ViewController.swift ➞ viewDidLoad() #61
[All Logs] [Alert] [05-15-2017 14:28:03] Id:005 Details:This is an Alert message.
[Trace] ➞ ViewController.swift ➞ viewDidLoad() #62
You can filter them as well.
Printer.log.all(filterLogTypes: [.alert], showTrace: true)
This will only print
.alert
type tracked logs with tracing info.
[All Logs] [Alert] [05-15-2017 14:28:03] Id:005 Details:This is an Alert message.
[Trace] ➞ ViewController.swift ➞ viewDidLoad() #62
all() function will always print plain logs. No fancy things.
Want to get all the logs?
//let array = Printer.log.getAllLogs()
let array = Printer.log.getAllLogs(filterLogTypes: [.success])
if !array.isEmpty {
array.forEach({ (log) in
print(log.details)
//or do something else.
})
}
Use cases:
See all the printer logs in PrinterViewController
. You can also filter the logs within the view controller.
IMPORTANT:
PrinterViewController
is based on the set properties forPrinter
and works exactly same, so make sure about the properties which you have set.
Use cases:
Features:
[Upcoming]
![]() |
![]() |
![]() |
How to use?
If you prefers manually installation.
You can always use Printer without PrinterViewController. But it's suggestible to add this class for better logging.
PrinterTableViewCell.swift
, PrinterViewController.swift
, Printer.storyboard
and Printer.swift
in your Project. You can simply add Printer folder as well.PrinterViewController
from your app.Always add it to someplace (example: navigation bar, side menu, tabbar, app settings) from where you can always present it while development.
let printerStoryboard = UIStoryboard.init(name: "Printer", bundle: Bundle.main)
let navcontroller = UINavigationController.init(rootViewController: (printerStoryboard.instantiateViewController(withIdentifier: "PrinterViewControllerID")))
self.present(navcontroller, animated: true, completion: nil)
Want to create a log file for use? We have covered it too.
let array = Printer.log.getAllLogs()
if !array.isEmpty {
Printer.log.saveLogToFile(logs: array)
}
All your logs will be created in a separate file under Printer folder.
Delete all Log files?
Printer.log.deleteLogFiles()
Want to delete all the log files and free up some space?
Printer.log.flush()
You can add a line after each logs.
DEFAULT:
false
IMPORTANT: Should be call in advance.
Printer.log.addLineAfterEachPrint = true
Example when addLineAfterEachPrint is set to true
.
[✅ Success] [⌚04-27-2017 10:53:28] [🆔 001] ➞ ✹✹This is a Success message.✹✹
________________________________________________________________________________________
[❌ Error] [⌚04-27-2017 10:53:28] [🆔 002] ➞ ✹✹This is a Error message.✹✹
________________________________________________________________________________________
[📣 Information] [⌚04-27-2017 10:53:28] [🆔 003] ➞ ✹✹This is an Information message.✹✹
________________________________________________________________________________________
[🚧 Warning] [⌚04-27-2017 10:53:28] [🆔 004] ➞ ✹✹This is a Warning message.✹✹
________________________________________________________________________________________
[🚨 Alert] [⌚04-27-2017 10:53:28] [🆔 005] ➞ ✹✹This is an Alert message.✹✹
________________________________________________________________________________________
You can even capitalized the title and details of logs.
DEFAULT:
false
IMPORTANT: Should be call in advance.
Printer.log.capitalizeTitles = true
DEFAULT:
false
IMPORTANT: Should be call in advance.
Printer.log.capitalizeDetails = true
Example when capitalizeTitles and capitalizeDetails are set to true
.
[✅ SUCCESS] [⌚04-27-2017 11:09:37] [🆔 001] ➞ ✹✹THIS IS A SUCCESS MESSAGE.✹✹
Don't want to show Emojis?
IMPORTANT: Should be call in advance.
Printer.log.hideEmojis()
Example when hideEmojis()
call.
[Success] [04-27-2017 11:08:45] [001] ➞ ✹✹This is a Success message.✹✹
[Error] [04-27-2017 11:08:45] [002] ➞ ✹✹This is a Error message.✹✹
[Information] [04-27-2017 11:08:45] [003] ➞ ✹✹This is an Information message.✹✹
[Warning] [04-27-2017 11:08:45] [004] ➞ ✹✹This is a Warning message.✹✹
[Alert] [04-27-2017 11:08:45] [005] ➞ ✹✹This is an Alert message.✹✹
Don't want to show Titles?
IMPORTANT: Should be call in advance.
Printer.log.hideTitles()
Don't want to show Log Time?
DEFAULT:
false
IMPORTANT: Should be call in advance.
Printer.log.hideLogsTime = true
Don't like the Emojis which is available? Want to set your own? You can do this.
IMPORTANT: Should be call in advance.
Printer.log.successEmojiSymbol = "🎃"
Oter properties for Emojis customization.
IMPORTANT: Should be call in advance.
Printer.log.errorEmojiSymbol = "<SetNew>"
Printer.log.warningEmojiSymbol = "<SetNew>"
Printer.log.infoEmojiSymbol = "<SetNew>"
Printer.log.alertEmojiSymbol = "<SetNew>"
Don't like the Titles which is available? Want to set your own? Want to set the localize titles? You can do this.
IMPORTANT: Should be call in advance.
Printer.log.successLogTitle = "Hurray!!"
Other properties for Titles customization.
IMPORTANT: Should be call in advance.
Printer.log.errorLogTitle = "<SetNew>"
Printer.log.warningLogTitle = "<SetNew>"
Printer.log.infoLogTitle = "<SetNew>"
Printer.log.alertLogTitle = "<SetNew>"
Don't like the Symbols which is available? Want to set your own? You can do this.
IMPORTANT: Should be call in advance.
Printer.log.arrowSymbol = "⇨"
Oter properties for Symbol customization.
IMPORTANT: Should be call in advance.
Printer.log.starSymbol = "<SetNew>"
Don't like the date format in logs? You can change it too.
DEFAULT:
MM-dd-yyyy HH:mm:ss
IMPORTANT: Should be call in advance.
Printer.log.logDateFormat = "hh:mm:ss a"
Example when logDateFormat is set to a different format.
[✅ Success] [⌚11:12:23 AM] [🆔 001] ➞ ✹✹This is a Success message.✹✹
Show specific logs with filter.
Printer.log.filterLogs = [.success, .alert]
This should only print logs of the specified types. I.e. Succes and Alert. All other logs will be ignored.
Written Printer logs everywhere? Want to Skip logging for LoginViewController.swift
for security?
To Skip logs for a file: Printer.log.skipFile()
To Add logs for a file: Printer.log.addFile()
IMPORTANT: You should call
addFile()
to start printing logs for the same file for which you have calledskipFile()
. This is other than thedisable
property which completely disables logging for all the files.
To disable all the logs.
DEFAULT:
false
IMPORTANT: You can set this anywhere and it should not print logs from where it sets.
Printer.log.disable = true
Let you will notified in advance before any logging events.
IMPORTANT: This block will ignore all the filters applied for Printer, means, it will always notify you for any logs whether the log will print or not.
Printer.log.onLogCompletion = { (log) in
print(log)
//print(log.0)
}
Will return current log, file name, function name, and line number. You can access it with log.0, log.1 so on.
Use cases:
You will not get notify if
disable
is set totrue
orprintOnlyIfDebugMode
is set totrue
and your app is inrelease
mode.
Want to see when app goes to background or comes to foreground?
Printer.log.addAppEventsHandler()
[📣 INFORMATION] [⌚05-17-2017 13:17:38] ➞ ✹✹App is in foreground now.✹✹
________________________________________________________________________________________
Stop logging for background or foreground events?
Printer.log.removeAppEventsHandler()
This is helpful when you're checking all the logs and want to see what happended after app went to background or comes to foreground?
Don't want to print the logs in RELEASE mode?
DEFAULT:
true
IMPORTANT: Should be call in advance.
Printer.log.printOnlyIfDebugMode = false
[New Features]
Have an idea for improvements of this class? Please open an issue.
You can shoot me an email to contact.
See the contributions for details.
The MIT License (MIT)
Read the LICENSE file for details.