Logging
In every scope where Pulumi Context
is available and global Besom import was included user has the capability to summon
logger by writing log
with a following severity level used as a logging method's name, e.g.:
@main def run = Pulumi.run {
Stack(log.warn("Nothing to do."))
}
Logging is an asynchronous, effectful operation and therefore returns an Output
. This means that all logging statements need to be composed
into other values that will eventually be either passed as Stack
arguments or exports. This is similar to how logging frameworks for cats
or ZIO
behave (eg.: log4cats).
Why not simply println
?
Given that you're working with CLI you might be tempted to just println
some value, but that will have no visible effect.
That's because Besom's Scala code is being executed in a different process than Pulumi. It's Pulumi that drives the
process by calling Besom. Therefore, you have to use functions provided by Besom for your code to log anything.