For the logging capability, Firecracker uses a single Logger object. The Logger
can be configured either by sending a PUT
API Request to the /logger
path or
by command line. You can configure the Logger only once (by using one of these
options) and once configured, you can not update it.
In order to configure the Logger, first you have to create the resource that will be used for logging:
# Create the required named pipe:
mkfifo logs.fifo
# The logger also works with usual files:
touch logs.file
You can configure the Logger by sending the following API command:
curl --unix-socket /tmp/firecracker.socket -i \
-X PUT "http://localhost/logger" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d "{
"log_path": "logs.fifo",
"level": "Warning",
"show_level": false,
"show_log_origin": false
}"
Details about the required and optional fields can be found in the swagger definition.
If you want to configure the Logger on startup and without using the API socket,
you can do that by passing the parameter --log-path
to the Firecracker
process:
./firecracker --api-sock /tmp/firecracker.socket --log-path
<path_to_the_logging_fifo_or_file>
The other Logger fields have, in this case, the default values:
Level -> Warning
, show_level -> false
, show_log_origin -> false
. For
configuring these too, you can also pass the following optional parameters:
--level <log_level>
, --show-level
, --show-log-origin
:
./firecracker --api-sock /tmp/firecracker.socket --log-path
logs.fifo --level Error --show-level --show-log-origin
The logs.fifo
pipe will store the human readable logs, e.g. errors, warnings
etc.(depending on the level).
If the path provided is a named pipe, you can use the script below to read from it:
logs=logs.fifo
while true
do
if read line <$logs; then
echo $line
fi
done
echo "Reader exiting"
Otherwise, if the path points to a normal file, you can simply do:
cat logs.file