{"version":3,"sources":["webpack:///./src/views/Chap31Logging.vue?64f7","webpack:///src/views/Chap31Logging.vue","webpack:///./src/views/Chap31Logging.vue?bc8b","webpack:///./src/views/Chap31Logging.vue","webpack:///./src/assets/images/emergency_bradcast.png"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","directives","name","rawName","pre","staticStyle","staticRenderFns","components","FeedbackInvite","BuyCopyInvite","NewsletterInput","ChapterHeading","ChapterBibliography","TOCChapter","NavBar","BIconLink45deg","Footer","created","window","data","publicPath","metaInfo","title","htmlAttrs","lang","meta","charset","content","property","link","rel","href","component","module","exports"],"mappings":"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","file":"js/chunk-11edbba2.230c8070.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('NavBar'),_c('div',{staticClass:\"container-fluid\"},[_c('b-row',[_c('TOCChapter',{attrs:{\"chapter-id\":\"Chap31Logging\"}}),_c('b-col'),_c('b-col',{attrs:{\"role\":\"main\",\"md\":\"6\"}},[_c('ChapterHeading',{attrs:{\"chapter-title\":\"Chapter 31: Logging\",\"image-name\":\"logging.jpg\",\"image-alt\":\"Logging\"}}),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"what-will-you-learn-in-this-chapter\"}}),_c('h1',{attrs:{\"data-number\":\"1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"1\")]),_vm._v(\" What will you learn in this chapter? \"),_c('a',{attrs:{\"href\":\"#what-will-you-learn-in-this-chapter\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"What is a log?\")])]),_c('li',[_c('p',[_vm._v(\"How to use the standard logging package?\")])]),_c('li',[_c('p',[_vm._v(\"How to set up and use logrus?\")])]),_c('li',[_c('p',[_vm._v(\"What are log levels?\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"technical-concepts-covered\"}}),_c('h1',{attrs:{\"data-number\":\"2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"2\")]),_vm._v(\" Technical concepts covered \"),_c('a',{attrs:{\"href\":\"#technical-concepts-covered\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Log\")])]),_c('li',[_c('p',[_vm._v(\"Log level\")])]),_c('li',[_c('p',[_vm._v(\"Severity\")])]),_c('li',[_c('p',[_vm._v(\"Syslog\")])]),_c('li',[_c('p',[_vm._v(\"Deamon\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"introduction\"}}),_c('h1',{attrs:{\"data-number\":\"3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"3\")]),_vm._v(\" Introduction \"),_c('a',{attrs:{\"href\":\"#introduction\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"A log is a structured and parsable message produced by an application installed on a system. It’s the developer’s task to add logs to its application.\")]),_c('p',[_vm._v(\"An application without bugs does not exist; even if you apply the best practices, you will have to face at a certain point of time a failure. A failure can be recoverable, meaning that your system can handle it and continue to work. It can also be unrecoverable. In the last case, your application will stop working.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"failure-is-common\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"4\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"4\")]),_vm._v(\" Failure is common \"),_c('a',{attrs:{\"href\":\"#failure-is-common\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Imagine the following situation: your phone starts to ring in the middle of the night. The CEO is at the other end of the line. He informs you that the site you have developed is down. Customers cannot place orders. You have to make it work now. You connect to the machine, restart the program, but it won’t restart. With stress reaching high levels, you will try to figure out why.\")]),_c('p',[_vm._v(\"With logs, you can investigate and discover the origin of an error. Without logs, it can be far more difficult. But even with logs, your task will not be easy.\")]),_c('p',[_vm._v(\"The difficulty will decrease if you know :\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"When your system has failed\")])]),_c('li',[_c('p',[_vm._v(\"Where the error has been raised\")])]),_c('li',[_c('p',[_vm._v(\"Which user/operation was involved when the system failed.\")])])]),_c('p',[_vm._v(\"The worst thing that can happen to an application is to produce errors, but those errors stay unnoticed, and bugs are still there. A solid logging habit allows you to monitor your application and maintain it in good health.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"example-logs\"}}),_c('h1',{attrs:{\"data-number\":\"5\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"5\")]),_vm._v(\" Example logs \"),_c('a',{attrs:{\"href\":\"#example-logs\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Here is an example of logs :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"2018/10/14 20:08:08 System is starting\\n2018/10/14 20:08:08 Retrieving user 12\\n2018/10/14 20:08:08 Compute the total of invoice 1262663663\")])]),_c('p',[_vm._v(\"As you can see, we have a timestamp followed by a string, which is the message.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"standard-log-package\"}}),_c('h1',{attrs:{\"data-number\":\"6\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"6\")]),_vm._v(\" Standard log package \"),_c('a',{attrs:{\"href\":\"#standard-log-package\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"In the standard library the \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log\")])]),_vm._v(\" package implements a very simple yet powerful logger.\")]),_c('p',[_vm._v(\"The first thing to do is to define the Output of your logger. If you omit to define it, it will be the standard error. In the example, we are going to log into a file :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// logging/main.go \\n\\nf, err := os.OpenFile(\\\"app.log\\\", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)\\nif err != nil {\\n log.Fatalf(\\\"error opening file: %v\\\", err)\\n}\\ndefer f.Close()\\nlog.SetOutput(f)\")])]),_c('p',[_vm._v(\"We use the package \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"os\")])]),_vm._v(\" to open our file (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"os.OpenFile\")])]),_vm._v(\") the call to this function takes the following parameters :\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"The name of the file : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"\\\"app.log\\\"\")])])])]),_c('li',[_c('p',[_vm._v(\"The \"),_c('strong',[_vm._v(\"flags\")]),_vm._v(\" describe how the file has to be opened by the system. In our case, we want to append data to it (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"O_APPEND\")])]),_vm._v(\"), create it if it does not exist (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"O_CREATE\")])]),_vm._v(\") and open it in write-only mode (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"O_WRONLY\")])]),_vm._v(\")\")])]),_c('li',[_c('p',[_vm._v(\"The set of permissions.\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0644\")])]),_vm._v(\" means that the user can read and write, the group and others can write. If the file does not exist, the set of permissions will be applied.\")])])]),_c('p',[_vm._v(\"We are calling \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"defer.Close()\")])]),_vm._v(\", to close the file when the main function has returned.\")]),_c('p',[_vm._v(\"Then we set the output of the standard logger to this opened file (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.SetOutput\")])]),_vm._v(\" takes an \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"io.Writer\")])]),_vm._v(\")\")]),_c('p',[_vm._v(\"We are ready to log :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// logging/main.go \\nlog.Println(\\\"System is starting\\\")\\nlog.Println(\\\"Retrieving user 12\\\")\\nlog.Println(\\\"Compute the total of invoice 1262663663\\\")\")])]),_c('p',[_vm._v(\"To log, you can use the functions \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Print\")])]),_vm._v(\", \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Printf\")])]),_vm._v(\", \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Println\")])]),_vm._v(\", \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Fatal\")])]),_vm._v(\", \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Fatalf\")])]),_vm._v(\"...\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"log.print-log.println-log.printf\"}}),_c('h2',{attrs:{\"data-number\":\"6.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"6.1\")]),_vm._v(\" log.Print, log.Println, log.Printf \"),_c('a',{attrs:{\"href\":\"#log.print-log.println-log.printf\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Print(\\\"System failure caused by lost DB connexion\\\")\")])]),_vm._v(\" will output to the standard logger :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"2018/10/14 20:08:08 System failure caused by lost DB connexion\")])]),_c('p',[_vm._v(\"If you call \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Println(\\\"xyz\\\")\")])]),_vm._v(\" the execution result of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"fmt.Sprintln(\\\"xyz\\\")\")])]),_vm._v(\" will be printed to the standard logger :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"log.Println(\\\"System failure caused by lost DB connexion\\\")\")])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Printf\")])]),_vm._v(\" is interesting. It allows you to add to your message formatted variables. You can use \"),_c('strong',[_vm._v(\"format specifiers\")]),_vm._v(\" to tell Go how it should output the variable.\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"dbIp:=\\\"192.168.210.12\\\"\\ndbPort := 3306\\nlog.Printf(\\\"System failure caused by lost DB connexion to host %s at port %d\\\", dbIp,dbPort)\")])]),_c('p',[_vm._v(\"Will output the following :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"2018/10/16 13:29:07 System failure caused by lost DB connexion to host 192.168.210.12 at port 3306\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"log.fatal-log.fatalln-log.fatalfsubseclog.fatal-log.fatalln-log.fatasubseclog.fatal-log.fatalln-log.fata-labelsubseclog.fatal-log.fatalln-log.fata\"}}),_c('h2',{attrs:{\"data-number\":\"6.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"6.2\")]),_vm._v(\" log.Fatal, log.Fatalln, log.Fatalf[[subsec:log.Fatal,-log.Fatalln,-log.Fata]]{#subsec:log.Fatal,-log.Fatalln,-log.Fata label=“subsec:log.Fatal,-log.Fatalln,-log.Fata”} \"),_c('a',{attrs:{\"href\":\"#log.fatal-log.fatalln-log.fatalfsubseclog.fatal-log.fatalln-log.fatasubseclog.fatal-log.fatalln-log.fata-labelsubseclog.fatal-log.fatalln-log.fata\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"If you are calling one of those function, it will cause the program to shut down immediately. Internally \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Fatal(ln|f)\")])]),_vm._v(\" will call \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"os.Exit(1)\")])]),_vm._v(\". Everything will be stopped, and the deferred functions will not be called. It’s a sort of emergency button. The program does not terminate properly when you do a fatal.\")]),_c('dl',[_c('dt',[_vm._v(\"log.Fatal\")]),_c('dd',[_c('p',[_vm._v(\"will output to the standard logger the return value of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"fmt.Sprint\")])]),_vm._v(\" and call \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"os.Exit(1)\")])])])]),_c('dt',[_vm._v(\"log.Fatalf\")]),_c('dd',[_c('p',[_vm._v(\"the return value of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"fmt.Sprintf\")])]),_vm._v(\" will be printed to the standard logger and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"os.Exit(1)\")])]),_vm._v(\"will be called\")])]),_c('dt',[_vm._v(\"log.Fatalln\")]),_c('dd',[_c('p',[_vm._v(\"the return value of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"fmt.Sprintln\")])]),_vm._v(\" will be printed to the standard logger and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"os.Exit(1)\")])]),_vm._v(\" will be called\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"log.panic-log.panicln-log.panicf\"}}),_c('h2',{attrs:{\"data-number\":\"6.3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"6.3\")]),_vm._v(\" log.Panic, log.Panicln, log.Panicf \"),_c('a',{attrs:{\"href\":\"#log.panic-log.panicln-log.panicf\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The same logic as above is used for calls to \"),_c('strong',[_vm._v(\"log.Panic[f][ln]\")]),_vm._v(\" there is no difference, \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"fmt.Sprint\")])]),_vm._v(\" , \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"fmt.Sprinf\")])]),_vm._v(\" and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"fmt.Sprintln\")])]),_vm._v(\" is called under the hood.\")]),_c('p',[_vm._v(\"The only difference is that we have a call to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"panic\")])]),_vm._v(\" (instead of an \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"os.Exit(1)\")])]),_vm._v(\").\")]),_c('p',[_vm._v(\"When the logger is calling \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"panic\")])]),_vm._v(\" on your behalf :\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Any deferred functions defined in the current function will be called\")])]),_c('li',[_c('p',[_vm._v(\"The current function will return to its caller\")])]),_c('li',[_c('p',[_vm._v(\"In the caller, all deferred functions defined will be called, and the caller will return to the function that called it...\")])])]),_c('p',[_vm._v(\"A call to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"panic\")])]),_vm._v(\" will call all deferred functions that are defined in the goroutine call stack.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"logrus\"}}),_c('h1',{attrs:{\"data-number\":\"7\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"7\")]),_vm._v(\" Logrus \"),_c('a',{attrs:{\"href\":\"#logrus\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The functions defined on the standard logger are limited, and you might want to add fancy features to your application’s logger. You can use a popular module called logrus (more than 17k stars on Github)\"),_c('a',{staticClass:\"footnote-ref\",attrs:{\"href\":\"#fn1\",\"id\":\"fnref1\",\"role\":\"doc-noteref\"}},[_c('sup',[_vm._v(\"1\")])]),_vm._v(\".\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"setup\"}}),_c('h2',{attrs:{\"data-number\":\"7.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"7.1\")]),_vm._v(\" Setup \"),_c('a',{attrs:{\"href\":\"#setup\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"First, you need to install it (after initializing your module with \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"go mod init your/module/path\")])]),_vm._v(\") :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"go get github.com/sirupsen/logrus\")])]),_c('p',[_vm._v(\"Then you can configure your logger :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"file, err := os.OpenFile(\\\"app.log\\\", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)\\nif err != nil {\\n // handle error\\n}\\nlog.SetOutput(file)\")])]),_c('p',[_vm._v(\"Here we will log to a file. You can also log to the standard error (stderr). In this case, you can omit the last lines.\")]),_c('p',[_vm._v(\"Then you can begin to log :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"log.Print(\\\"my first log\\\")\")])]),_c('p',[_vm._v(\"Here is the output :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"time=\\\"2021-02-19T12:28:57+01:00\\\" level=info msg=\\\"my first log\\\"\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"levels\"}}),_c('h2',{attrs:{\"data-number\":\"7.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"7.2\")]),_vm._v(\" Levels \"),_c('a',{attrs:{\"href\":\"#levels\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"An interesting feature of logrus is to handle log levels. Each log has a level of criticality. With a level, you can apply filters to your log files. Here is an example of a log for each level available :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// logging/main.go \\n\\nlog.Trace(\\\"going to mars\\\")\\nlog.Debug(\\\"connected, received buffer from worker\\\")\\nlog.Info(\\\"connection successful to db\\\")\\nlog.Warn(\\\"something went wrong with x\\\")\\nlog.Error(\\\"an error occurred in worker x\\\")\\nlog.Fatal(\\\"impossible to continue exec\\\")\\nlog.Panic(\\\"system emergency shutdown\\\")\")])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"trace: very detailed information about the program run, usually for debugging purposes\")])]),_c('li',[_c('p',[_vm._v(\"debug: used to output very detailed information, usually for debugging purpose\")])]),_c('li',[_c('p',[_vm._v(\"info: informational logs\")])]),_c('li',[_c('p',[_vm._v(\"warn (warning): a non-critical error or event that we should fix. The application can still operate.\")])]),_c('li',[_c('p',[_vm._v(\"error: an error that we should fix. The application can still operate.\")])]),_c('li',[_c('p',[_vm._v(\"fatal: a critical error, the application will be stopped\")])]),_c('li',[_c('p',[_vm._v(\"panic: the highest level of criticality, the application will be stopped\")])])]),_c('p',[_vm._v(\"You can then set at which level your application will produce logs.\")]),_c('p',[_vm._v(\"By default, trace and debug levels are not printed.\")]),_c('p',[_vm._v(\"For example, if you want to output \"),_c('strong',[_vm._v(\"all levels\")]),_vm._v(\" use the following line :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"log.SetLevel(log.TraceLevel)\")])]),_c('p',[_vm._v(\"If you want to output only errors (and also fatal / panic) :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"log.SetLevel(log.ErrorLevel)\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"fields\"}}),_c('h2',{attrs:{\"data-number\":\"7.3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"7.3\")]),_vm._v(\" Fields \"),_c('a',{attrs:{\"href\":\"#fields\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"You can add fields to your log messages. A field consists of a key and a value. A monitoring solution can easily parse fields\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// logging/main.go \\n\\nworkerLogger := log.WithFields(log.Fields{\\n \\\"source\\\": \\\"worker\\\",\\n})\\nworkerLogger.Info(\\\"worker has finished processed task\\\")\\n\\nmysqlLogger := log.WithFields(log.Fields{\\n \\\"source\\\": \\\"db\\\",\\n \\\"dbType\\\": \\\"mysql\\\",\\n})\\nmysqlLogger.Error(\\\"impossible to establish connexion\\\")\")])]),_c('p',[_vm._v(\"Will generate the following logs :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"time=\\\"2021-02-19T12:49:47+01:00\\\" level=info msg=\\\"worker has finished processed task\\\" source=worker\\ntime=\\\"2021-02-19T12:49:47+01:00\\\" level=error msg=\\\"impossible to establish connexion\\\" dbType=mysql source=db\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"logging-format-the-syslog-approach\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"8\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"8\")]),_vm._v(\" Logging Format: the Syslog approach \"),_c('a',{attrs:{\"href\":\"#logging-format-the-syslog-approach\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Syslog is an open standard for message logging. This section will detail some best practices extracted from RFC 5424, which specifies the format of log messages. Here is a list of fields that you can add to your logger to increase its efficiency :\")]),_c('div',{staticClass:\"list\"},[_c('p',[_vm._v(\"it describes which part of the system has sent the log message\")])]),_c('p',[_vm._v(\"The RFC gives the set of all possible facilities:\")]),_c('table',[_c('caption',[_vm._v(\"Syslog facilities \"),_c('b-link',{staticClass:\"citation\",attrs:{\"data-cites\":\"gerhards2009syslog\",\"href\":\"#gerhards2009syslog\"}},[_vm._v(\"[@gerhards2009syslog]\")])],1),_c('thead',[_c('tr',{staticClass:\"header\"},[_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Code\")]),_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Facility\")])])]),_c('tbody',[_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"kernel messages\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"user-level messages\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"2\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"mail system\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"3\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"system daemons\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"4\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"security/authorization messages\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"5\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"messages generated internally by syslogd\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"6\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"line printer subsystem\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"7\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"network news subsystem\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"8\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"UUCP subsystem\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"9\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"clock daemon\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"10\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"security/authorization messages\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"11\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"FTP daemon\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"12\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"NTP subsystem\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"13\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"log audit\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"14\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"log alert\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"15\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"clock daemon (note 2)\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"16\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"local use 0\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"17\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"local use 1\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"18\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"local use 2\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"19\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"local use 3\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"20\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"local use 4\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"21\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"local use 5\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"22\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"local use 6\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"23\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"local use 7\")])])])]),_c('p',[_vm._v(\"The Go Syslog package has already an enum of the facilities, so you do not have to redevelop it :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"//src/log/syslog/syslog.go\\n//...\\nconst (\\n // Facility.\\n\\n // From /usr/include/sys/syslog.h.\\n // These are the same up to LOG_FTP on Linux, BSD, and OS X.\\n LOG_KERN Priority = iota << 3\\n LOG_USER\\n LOG_MAIL\\n LOG_DAEMON\\n LOG_AUTH\\n LOG_SYSLOG\\n LOG_LPR\\n LOG_NEWS\\n LOG_UUCP\\n LOG_CRON\\n LOG_AUTHPRIV\\n LOG_FTP\\n _ // unused\\n _ // unused\\n _ // unused\\n _ // unused\\n LOG_LOCAL0\\n LOG_LOCAL1\\n LOG_LOCAL2\\n LOG_LOCAL3\\n LOG_LOCAL4\\n LOG_LOCAL5\\n LOG_LOCAL6\\n LOG_LOCAL7\\n)\\n//...\")])]),_c('div',{staticClass:\"list\"},[_c('p',[_vm._v(\"each log message do not have the same seriousness; some messages are pure information, but others require you to take immediate action to maintain the service up. For instance, if you are running out of disk space, the log should be at a high level of severity because if you do not take action immediately, it will make your service crash.\")])]),_c('p',[_vm._v(\"The specification gives us also a list of severity level that is interesting :\")]),_c('table',[_c('caption',[_vm._v(\"Severity Level Syslog \"),_c('b-link',{staticClass:\"citation\",attrs:{\"data-cites\":\"gerhards2009syslog\",\"href\":\"#gerhards2009syslog\"}},[_vm._v(\"[@gerhards2009syslog]\")])],1),_c('thead',[_c('tr',{staticClass:\"header\"},[_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Code\")]),_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Level\")])])]),_c('tbody',[_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Emergency: the system is unusable\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Alert: we must take action immediately\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"2\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Critical: critical conditions\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"3\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Error: error conditions\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"4\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Warning: warning conditions\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"5\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Notice: normal but significant condition\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"6\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Informational: informational messages\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"7\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"Debug: debug-level messages\")])])])]),_c('p',[_vm._v(\"The go Syslog package also has an enum for the severity :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"//src/log/syslog/syslog.go\\n//...\\nconst (\\n // Severity.\\n\\n // From /usr/include/sys/syslog.h.\\n // These are the same on Linux, BSD, and OS X.\\n LOG_EMERG Priority = iota\\n LOG_ALERT\\n LOG_CRIT\\n LOG_ERR\\n LOG_WARNING\\n LOG_NOTICE\\n LOG_INFO\\n LOG_DEBUG\\n)\\n// ...\")])]),_c('div',{staticClass:\"list\"},[_c('p',[_vm._v(\"this is the date, time, and timezone at which the log has been written (and in extension when the event has happened). The RFC 5424 recommends using a specific format (specified in the RFC 3339). To get the timestamp in the requested format, you can use the following code :\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"timestamp := time.Now().Format(time.RFC3339)\")])]),_c('div',{staticClass:\"list\"},[_c('p',[_vm._v(\"when you aggregate logs, they can come from different machines; you have to be able to know which machine has encountered a problem an easy way to get it is to make a call to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"os.Hostname()\")])]),_vm._v(\". This last instruction will ask the kernel to answer the question :\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"hostname := os.Hostname()\")])]),_c('div',{staticClass:\"list\"},[_c('p',[_vm._v(\"populate this property with the name of your program. This will allow you to differentiate in the logs which application has produced the logs. It can be a time-saving habit if you have several applications that run on the same machine. Example: \"),_c('strong',[_vm._v(\"router\")])]),_c('p',[_vm._v(\"if you want to make your logs usable, you have to make them parsable. To do so, you can add structured data to your log. By structures data, we mean a set of key-value pairs that brings context and additional information to your log.\")])]),_c('p',[_vm._v(\"The priority value (named PRIVAL) is equal to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"facility * 8 + severity\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"example-log-formatted-following-rfc-5424\"}}),_c('h4',{attrs:{\"data-number\":\"8.0.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"8.0.0.1\")]),_vm._v(\" Example log formatted following RFC 5424 \"),_c('a',{attrs:{\"href\":\"#example-log-formatted-following-rfc-5424\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"<9>1 2018-10-17T20:56:58+02:00 Mx.local router help me please\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"send-logs-to-a-deamon\"}}),_c('h4',{attrs:{\"data-number\":\"8.0.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"8.0.0.2\")]),_vm._v(\" Send logs to a deamon \"),_c('a',{attrs:{\"href\":\"#send-logs-to-a-deamon\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"We can send logs to a log deamon. A \"),_c('strong',[_vm._v(\"deamon\")]),_vm._v(\" is a program that runs continuously in the background. A deamon log is a program that is responsible for collecting logs from applications :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"logwriter, err := syslog.New(syslog.LOG_WARNING|syslog.LOG_DAEMON, \\\"loggingTestProgram\\\")\\nif err != nil {\\n log.Fatal(err)\\n}\\nlogwriter.Emerg(\\\"emergency sent to syslog. TEST2\\\")\")])]),_c('p',[_vm._v(\"We will add the log to the system logs of the machine. Because it’s an emergency, it will be broadcasted to open terminals (see figure).\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/emergency_bradcast.png'),\"alt\":\"An emergency Syslog message broadcasted to a terminal\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"An emergency Syslog message broadcasted to a terminal\")])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"test-yourself\"}}),_c('h1',{attrs:{\"data-number\":\"9\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"9\")]),_vm._v(\" Test yourself \"),_c('a',{attrs:{\"href\":\"#test-yourself\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"questions\"}}),_c('h2',{attrs:{\"data-number\":\"9.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"9.1\")]),_vm._v(\" Questions \"),_c('a',{attrs:{\"href\":\"#questions\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"A call to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Fatal\")])]),_vm._v(\" will execute deferred functions. True or False?\")])]),_c('li',[_c('p',[_vm._v(\"A call to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Panic\")])]),_vm._v(\" will execute deferred functions. True or False?\")])]),_c('li',[_c('p',[_vm._v(\"Order the following log levels in terms of criticality (from low to high): error, panic, info, trace.\")])]),_c('li',[_c('p',[_vm._v(\"Why adding structured data to your logs is considered a good practice?\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"answers\"}}),_c('h2',{attrs:{\"data-number\":\"9.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"9.2\")]),_vm._v(\" Answers \"),_c('a',{attrs:{\"href\":\"#answers\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"A call to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Fatal\")])]),_vm._v(\" will execute deferred functions. True or False?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"False\")])]),_c('li',[_c('p',[_vm._v(\"Deferred functions will not be run\")])]),_c('li',[_c('p',[_vm._v(\"The program will exit with code 1\")])])])]),_c('li',[_c('p',[_vm._v(\"A call to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Panic\")])]),_vm._v(\" will execute deferred functions. True or False?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_vm._v(\"True\")])])]),_c('li',[_c('p',[_vm._v(\"Order the following log levels in term of criticality (from low to high): fatal, error, panic, info, trace\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_vm._v(\"trace, info, error, panic\")])])]),_c('li',[_c('p',[_vm._v(\"Why adding structured data to your logs is considered a good practice?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Structured data are easy to parse by monitoring systems\")])]),_c('li',[_c('p',[_vm._v(\"Consequently, logs with structured data can be exploited more efficiently by monitoring tools and teams.\")])])])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"key-takeaways\"}}),_c('h1',{attrs:{\"data-number\":\"10\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10\")]),_vm._v(\" Key Takeaways \"),_c('a',{attrs:{\"href\":\"#key-takeaways\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"An application should produce informative logs\")])]),_c('li',[_c('p',[_vm._v(\"Logs can help developers to debug their applications when a failure occurs.\")])]),_c('li',[_c('p',[_vm._v(\"We can write logs on a file or on any type that implements the interface\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"io.Writer\")])])])]),_c('li',[_c('p',[_vm._v(\"The \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log\")])]),_vm._v(\" package from the standard library is a good starting point when you need to add logs to your application.\")])]),_c('li',[_c('p',[_vm._v(\"When \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Fatal\")])]),_vm._v(\" is called deferred functions are not run\")])]),_c('li',[_c('p',[_vm._v(\"When \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Panic\")])]),_vm._v(\" is called deferred functions are run\")])]),_c('li',[_c('p',[_vm._v(\"The \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"logrus\")])]),_vm._v(\" module offers interesting features such as log levels, formatting options, and fields\")])]),_c('li',[_c('p',[_vm._v(\"Adding parsable fields to your logs is a good practice; it makes them easier to analyze.\")])])]),_c('section',{staticClass:\"footnotes\",attrs:{\"role\":\"doc-endnotes\"}},[_c('hr'),_c('ol',[_c('li',{attrs:{\"id\":\"fn1\",\"role\":\"doc-endnote\"}},[_c('p',[_vm._v(\"https://github.com/sirupsen/logrus\"),_c('a',{staticClass:\"footnote-back\",attrs:{\"href\":\"#fnref1\",\"role\":\"doc-backlink\"}},[_vm._v(\"↩︎\")])])])])]),_c('h1',[_vm._v(\"Bibliography\")]),_c('ChapterBibliography',{attrs:{\"chapter-id\":\"Chap31Logging\"}}),_c('b-row',{staticClass:\"ml-1 mr-1 \"},[_c('b-col',{staticClass:\"text-center border mr-1 p-2\"},[_c('router-link',{attrs:{\"to\":{name:'Chap30Concurrency'}}},[_c('p',[_c('u',[_c('small',[_vm._v(\"Previous\")])])]),_c('p',[_c('small',[_vm._v(\"Concurrency\")])])])],1),_c('b-col',{staticClass:\"text-center border p-1 \"},[_c('router-link',{attrs:{\"to\":{name:'Chap32Templates'}}},[_c('p',[_c('u',[_c('small',[_vm._v(\"Next\")])])]),_c('p',[_c('small',[_vm._v(\"Templates\")])])])],1)],1),_c('b-row',{staticClass:\"mt-1 ml-1 mr-1\"},[_c('b-col',{staticClass:\"text-center border p-1 \"},[_c('b-link',{attrs:{\"to\":{name:'Home'}}},[_vm._v(\"Table of contents\")])],1)],1),_c('FeedbackInvite'),_c('NewsletterInput'),_c('Footer')],1),_c('b-col')],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chap31Logging.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chap31Logging.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Chap31Logging.vue?vue&type=template&id=a9212fec&scoped=true&\"\nimport script from \"./Chap31Logging.vue?vue&type=script&lang=js&\"\nexport * from \"./Chap31Logging.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a9212fec\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/emergency_bradcast.0db84f19.png\";"],"sourceRoot":""}