-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLogUtils.swift
124 lines (105 loc) · 4.27 KB
/
LogUtils.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// LogUtils.swift
// Meteorologist
//
// Created by Ed Danley on 11/15/15.
// Copyright © 2015 The Meteorologist Group, LLC. All rights reserved.
//
// Code taken from: https://gist.github.com/vtardia/3f7d17efd7b258e82b62
//
import Foundation
var logFileHandle: FileHandle?
var original_stderr: Int32?;
#if DEBUG_1
func DebugLog(message: String, file: String = #file, line: Int = #line) {
let defaults = NSUserDefaults.standardUserDefaults()
if (defaults.stringForKey("logMessages")! == "1") {
return { NSLog("<Debug>: " + message + " [" + file + ":%i]", line) }()
}
}
func InfoLog(message: String, file: String = #file, line: Int = #line) {
let defaults = NSUserDefaults.standardUserDefaults()
if (defaults.stringForKey("logMessages")! == "1") {
return { NSLog("<Info>: " + message + " [" + file + ":%i]", line) }()
}
}
func WarningLog(message: String, file: String = #file, line: Int = #line) {
let defaults = NSUserDefaults.standardUserDefaults()
if (defaults.stringForKey("logMessages")! == "1") {
return { NSLog("<Warning>: " + message + " [" + file + ":%i]", line) }()
}
}
func ErrorLog(message: String, file: String = #file, line: Int = #line) {
//let defaults = NSUserDefaults.standardUserDefaults()
//if (defaults.stringForKey("logMessages")! == "1") {
return { NSLog("<Error>: " + message + " [" + file + ":%i]", line) }()
//}
}
#else
func DebugLog(_ message: String, file: String = #file, line: Int = #line) {
let defaults = UserDefaults.standard
if (defaults.string(forKey: "logMessages")! == "1") {
// Uncomment this statement for Debug level messages
//return { NSLog("<Debug>: " + message) }()
}
}
func InfoLog(_ message: String, file: String = #file, line: Int = #line) {
let defaults = UserDefaults.standard
if (defaults.string(forKey: "logMessages")! == "1") {
return { NSLog("<Info>: " + message) }()
}
}
func WarningLog(_ message: String, file: String = #file, line: Int = #line) {
let defaults = UserDefaults.standard
if (defaults.string(forKey: "logMessages")! == "1") {
return { NSLog("<Warning>: " + message) }()
}
}
func ErrorLog(_ message: String, file: String = #file, line: Int = #line) {
//let defaults = NSUserDefaults.standardUserDefaults()
//if (defaults.stringForKey("logMessages")! == "1") {
return { NSLog("<Error>: " + message) }()
//}
}
#endif
// Redirect log to ~/Library/Logs/<AppName>.log
func SetCustomLogFilename(_ name: String) {
var logDirectory: URL
// Search log directory path
do {
try logDirectory = FileManager.default.url(for: FileManager.SearchPathDirectory.libraryDirectory, in: FileManager.SearchPathDomainMask.userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("Logs/")
} catch {
return
}
// Calculate full log file path
if let logFilePath = logDirectory.appendingPathComponent(String(format:"%@.log", name)) as URL? {
// Save STDERR
let stderr = FileHandle.standardError
original_stderr = dup(stderr.fileDescriptor);
// If log file already exists, delete it
if FileManager.default.isWritableFile(atPath: logFilePath.path) {
do {
try FileManager.default.removeItem(atPath: logFilePath.path)
}
catch let error as NSError {
print("Ooops! Something went wrong deleting file: " + logFilePath.path + "\(error)")
}
}
// Create an empty log file at path, NSFileHandle doesn't do it!
if !FileManager.default.isWritableFile(atPath: logFilePath.path) {
do {
try "".write(toFile: logFilePath.path, atomically: true, encoding: String.Encoding.utf8)
} catch {
return
}
}
if let logFileHandle = FileHandle(forWritingAtPath: logFilePath.path) {
// (Try to) Redirect STDERR to log file
let err:Int32? = dup2(logFileHandle.fileDescriptor, stderr.fileDescriptor)
// Something went wrong
if (err == -1) {
ErrorLog(String(format:"Could not redirect stderr, error %d", errno))
}
}
}
} // SetCustomLogFilename