Use the logging mechanismΒΆ
Many high-level interfaces of the haskus-system
use the Sys
monad. It is
basically a wrapper for the IO
monad that adds a logging mechanism.
The following code prints the system log that is implicitly maintained in the
Sys
monad on the kernel console.
{-# LANGUAGE BlockArguments #-}
import Haskus.System
main :: IO ()
main = runSys do
term <- defaultTerminal
writeStrLn term "Hello World!"
waitForKey term
sysLogPrint -- print system log
powerOff
Hence, the output of this program is something like:
Hello World!
---- Log root
--*- FORK: Terminal input handler
|---- Read bytes from Handle 0 (succeeded with 1)
|---- readBytes /= 0 (success)
--*- FORK: Terminal output handler
[ 1.818814] reboot: Power down
You can see that the log is hierarchical and that it supports thread forks:
defaultTerminal
forks 2 threads to handle asynchronous terminal
input/output; the input thread indicates in the log that it has read 1 byte from
the terminal input (when I have pressed the enter
key).
Note that the log entries produced by the framework functions may change in the future, hence the contents of the log may change and you may not get exactly the same output if you try to execute this code.