57 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
//
 | 
						|
//  main.swift
 | 
						|
//  ShellLog
 | 
						|
//
 | 
						|
//  Created by Eryn Wells on 1/18/22.
 | 
						|
//
 | 
						|
 | 
						|
import ArgumentParser
 | 
						|
import OSLog
 | 
						|
 | 
						|
enum Level {
 | 
						|
    case Debug
 | 
						|
    case Info
 | 
						|
    case Warn
 | 
						|
    case Error
 | 
						|
}
 | 
						|
 | 
						|
extension Level: ExpressibleByArgument {
 | 
						|
    init?(argument: String) {
 | 
						|
        switch (argument) {
 | 
						|
        case "debug":
 | 
						|
            self = .Debug
 | 
						|
        case "info":
 | 
						|
            self = .Info
 | 
						|
        case "warn":
 | 
						|
            self = .Warn
 | 
						|
        case "error":
 | 
						|
            self = .Error
 | 
						|
        default:
 | 
						|
            return nil
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
struct ShellLog: ParsableCommand {
 | 
						|
 | 
						|
    @Option(name: .shortAndLong, help: "The log level")
 | 
						|
    var level: Level?
 | 
						|
 | 
						|
    @Argument() var message: String
 | 
						|
 | 
						|
    func run() throws {
 | 
						|
        let log = Logger(subsystem: "me.erynwells.shell", category: "Shell")
 | 
						|
        switch level {
 | 
						|
        case .some(.Debug):
 | 
						|
            log.debug("\(message, privacy: .public)")
 | 
						|
        case .none, .some(.Info):
 | 
						|
            log.info("\(message, privacy: .public)")
 | 
						|
        case .some(.Warn):
 | 
						|
            log.warning("\(message, privacy: .public)")
 | 
						|
        case .some(.Error):
 | 
						|
            log.error("\(message, privacy: .public)")
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
ShellLog.main()
 |