File: LogHandle.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (58 lines) | stat: -rw-r--r-- 1,738 bytes parent folder | download
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
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021 Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See https://swift.org/LICENSE.txt for license information
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

import Foundation

/// An object that writes logs to the given output device.
///
/// You can use log handle objects to write to standard output, standard error, or any given file handle.
public enum LogHandle: TextOutputStream {
    
    /// A log handle that will perform writes to standard output.
    case standardOutput
    
    /// A log handle that will perform writes to standard error.
    case standardError
    
    /// A log handle that will ignore all write requests.
    ///
    /// This log handle's intended use case is for testing scenarios when logs can be ignored.
    case none
    
    /// A log handle that will write to the given file handle.
    case file(FileHandle)
    
    /// A log handle that writes to an NSString reference.
    case memory(LogStorage)
    
    /// A by-reference string storage.
    public class LogStorage {
        var text = ""
    }
    
    /// Writes the given string to the log handle.
    public mutating func write(_ string: String) {
        switch self {
        case .standardOutput:
            fputs(string, stdout)
            fflush(stdout)
        case .standardError:
            fputs(string, stderr)
            fflush(stderr)
        case .none:
            return
        case .file(let fileHandle):
            fileHandle.write(Data(string.utf8))
        case .memory(let storage):
            storage.text.append(string)
        }
    }
}