annotate vendor/github.com/sirupsen/logrus/alt_exit.go @ 68:4b79810863f6 draft

Ready to release 0.6.0 Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Wed, 13 Sep 2023 10:49:50 +0000
parents 787b5ee0289d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package logrus
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 // The following code was sourced and modified from the
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 // https://github.com/tebeka/atexit package governed by the following license:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 // Copyright (c) 2012 Miki Tebeka <miki.tebeka@gmail.com>.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 // Permission is hereby granted, free of charge, to any person obtaining a copy of
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 // this software and associated documentation files (the "Software"), to deal in
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 // the Software without restriction, including without limitation the rights to
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 // the Software, and to permit persons to whom the Software is furnished to do so,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 // subject to the following conditions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 // The above copyright notice and this permission notice shall be included in all
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 // copies or substantial portions of the Software.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 "fmt"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 "os"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 var handlers = []func(){}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 func runHandler(handler func()) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 defer func() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 if err := recover(); err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 fmt.Fprintln(os.Stderr, "Error: Logrus exit handler error:", err)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 }()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 handler()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 func runHandlers() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 for _, handler := range handlers {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 runHandler(handler)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 // Exit runs all the Logrus atexit handlers and then terminates the program using os.Exit(code)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 func Exit(code int) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 runHandlers()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 os.Exit(code)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 // RegisterExitHandler appends a Logrus Exit handler to the list of handlers,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 // call logrus.Exit to invoke all handlers. The handlers will also be invoked when
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 // any Fatal log entry is made.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 // This method is useful when a caller wishes to use logrus to log a fatal
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 // message but also needs to gracefully shutdown. An example usecase could be
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 // closing database connections, or sending a alert that the application is
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 // closing.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 func RegisterExitHandler(handler func()) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 handlers = append(handlers, handler)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 // DeferExitHandler prepends a Logrus Exit handler to the list of handlers,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 // call logrus.Exit to invoke all handlers. The handlers will also be invoked when
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 // any Fatal log entry is made.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 // This method is useful when a caller wishes to use logrus to log a fatal
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 // message but also needs to gracefully shutdown. An example usecase could be
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 // closing database connections, or sending a alert that the application is
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 // closing.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 func DeferExitHandler(handler func()) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 handlers = append([]func(){handler}, handlers...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 }