# Introduction to logger

If you are not only using R in the interactive console for ad-hoc data analysis, but running eg batch jobs (for ETL, reporting, modeling, forecasting etc) as well, then logging the status(changes) of your script is a must so that later on you can review / debug what have happened.

For most cases, it’s enough to load the package and use the functions with the `log` prefix to log important and not so important messages, for example:

    library(logger)
    log_info('Loading data')
    #> INFO [2021-10-18 23:25:53] Loading data
    data(mtcars)
    log_info('The dataset includes {nrow(mtcars)} rows')
    #> INFO [2021-10-18 23:25:53] The dataset includes 32 rows
    if (max(mtcars$hp) < 1000) {
        log_warn('Oh, no! There are no cars with more than 1K horsepower in the dataset :/')
        log_debug('The most powerful car is {rownames(mtcars)[which.max(mtcars$hp)]} with {max(mtcars$hp)} hp')
    }
    #> WARN [2021-10-18 23:25:53] Oh, no! There are no cars with more than 1K horsepower in the dataset :/

Interestingly, the most powerful car was not being logged – because by default the `logger` prints messages with at least the `INFO` log level:

    log_threshold()
    #> [1] 400
    #> attr(,"level")
    #> [1] "INFO"
    #> attr(,"class")
    #> [1] "loglevel" "integer"

To change that, specify the new log level threshold, eg `TRACE` to log everything:

    log_threshold(TRACE)

The rerunning the above code chunk:

    log_info('Loading data')
    #> INFO [2021-10-18 23:25:53] Loading data
    data(mtcars)
    log_info('The dataset includes {nrow(mtcars)} rows')
    #> INFO [2021-10-18 23:25:53] The dataset includes 32 rows
    if (max(mtcars$hp) < 1000) {
        log_warn('Oh, no! There are no cars with more than 1K horsepower in the dataset :/')
        log_debug('The most powerful car is {rownames(mtcars)[which.max(mtcars$hp)]} with {max(mtcars$hp)} hp')
    }
    #> WARN [2021-10-18 23:25:53] Oh, no! There are no cars with more than 1K horsepower in the dataset :/
    #> DEBUG [2021-10-18 23:25:53] The most powerful car is Maserati Bora with 335 hp

You may also find the `?log_eval` function useful to log both an R expression and its result in the same log record:

    f <- sqrt
    g <- mean
    x <- 1:31
    log_eval(y <- f(g(x)), level = INFO)
    #> INFO [2021-10-18 23:25:53] 'y <- f(g(x))' => '4'
    str(y)
    #>  num 4

For more details, check the function reference in the manual, or start with the The Anatomy of a Log Request and Customizing the Format and the Destination of a Log Record vignettes.