# logr

The logr package helps create log files for R scripts. The package provides easy logging, without the complexity of other logging systems. It is designed for analysts who simply want a written log of their program execution. The package is implemented as a wrapper to the base R `sink()` function.

## How to use

There are really only three logr functions:

- `log_open()`
- `log_print()`
- `log_close()`

The `log_open()` function initiates the log. The `log_print()` function prints an object to the log. The `log_close()` function closes the log. In normal situations, a user would place the call to `log_open()` at the top of the program, call `log_print()` as needed in the program body, and call `log_close()` once at the end of the program.

A sample program is as follows:

    library(logr)

    # Create temp file location
    tmp <- file.path(tempdir(), "test.log")

    # Open log
    lf <- log_open(tmp)

    # Send message to log
    log_print("High Mileage Cars Subset")

    # Perform operations
    hmc <- subset(mtcars, mtcars$mpg > 20)

    # Print data to log
    log_print(hmc)

    # Close log
    log_close()

    # View results
    writeLines(readLines(lf))

### What to print to the log

You can print to the log anything that you can print to the console: vectors, lists, and data frames are all valid objects for logging. Under the hood, logr calls the `print()` function on that object, and writes the results to the log. The `log_print()` function, by default, will also print the object to the console. That means you can replace calls to `print()` with `log_print()`, and there will be no loss of convenience during development.

### What the log looks like

The log created by logr is simpler than most logging packages. This log is designed to be human-readable, and increases the traceability of your activities. There are three main enhancements to a logr log:

- A log header
- Notes
- A log footer

Here is an example log, created by the sample program above:

    =========================================================================
    Log Path: C:/Users/dbosa/AppData/Local/Temp/RtmpQtOzhy/log/test.log
    Working Directory: C:/packages/logr
    User Name: dbosak
    R Version: R Under development (unstable) (2020-06-29 r78751)
    Machine: BOSAK-MAIN x86-64
    Operating System: Windows 10 x64 build 18362
    Base Packages: stats graphics grDevices utils datasets methods base
    Other Packages: logr_1.2.7 dplyr_1.0.7 testthat_3.1.0
    Log Start Time: 2020-06-30 07:15:52
    =========================================================================

    High Mileage Cars Subset

    NOTE: Log Print Time:  2020-06-30 07:15:52
    NOTE: Elapsed Time in seconds: 0.0219531059265137

                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
    Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
    Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
    Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
    Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
    Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
    Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
    Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
    Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
    Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
    Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
    Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
    Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
    Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
    Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

    NOTE: Data frame has 14 rows and 11 columns.

    NOTE: Log Print Time:  2020-06-30 07:15:52
    NOTE: Elapsed Time in seconds: 0.0508558750152588

    =========================================================================
    Log End Time: 2020-06-30 07:15:53
    Log Elapsed Time: 0 00:00:00
    =========================================================================

### Next Steps

For addition exploration of the logr package, please read the following articles:

- Log Parts
- Additional Features
- Global Options
- Aliases for log_print()
- tidylog Integration
- Complete Example