Skip to content

Commit

Permalink
Re-style
Browse files Browse the repository at this point in the history
  • Loading branch information
hadley committed Aug 7, 2024
1 parent 1922bcb commit 56a22c7
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 104 deletions.
117 changes: 58 additions & 59 deletions R/layouts.R
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,16 @@ layout_glue_generator <- function(format = '{level} [{format(time, "%Y-%m-%d %H:
stop("Invalid log level, see ?log_levels")
}

meta <- logger_meta_env(
log_level = level,
namespace = namespace,
.logcall = .logcall,
.topcall = .topcall,
.topenv = .topenv,
parent = environment()
)
glue::glue(format, .envir = meta)

}, generator = deparse(match.call()))

meta <- logger_meta_env(
log_level = level,
namespace = namespace,
.logcall = .logcall,
.topcall = .topcall,
.topenv = .topenv,
parent = environment()
)
glue::glue(format, .envir = meta)
}, generator = deparse(match.call()))
}


Expand Down Expand Up @@ -95,17 +93,19 @@ layout_simple <- structure(function(level, msg, namespace = NA_character_,
#' }
layout_logging <- structure(function(level, msg, namespace = NA_character_,
.logcall = sys.call(), .topcall = sys.call(-1), .topenv = parent.frame()) {
meta <- logger_meta_env(
log_level = level,
namespace = namespace,
.logcall = .logcall,
.topcall = .topcall,
.topenv = .topenv
)
paste0(format(Sys.time(), "%Y-%m-%d %H:%M:%S"), ' ',
attr(level, 'level'), ':',
ifelse(meta$ns == 'global', '', meta$ns), ':',
msg)
meta <- logger_meta_env(
log_level = level,
namespace = namespace,
.logcall = .logcall,
.topcall = .topcall,
.topenv = .topenv
)
paste0(
format(Sys.time(), "%Y-%m-%d %H:%M:%S"), " ",
attr(level, "level"), ":",
ifelse(meta$ns == "global", "", meta$ns), ":",
msg
)
}, generator = quote(layout_logging()))


Expand Down Expand Up @@ -141,16 +141,16 @@ layout_glue <- layout_glue_generator()
#' such as [layout_glue_generator()]
#' @note This functionality depends on the \pkg{crayon} package.
#' @examplesIf requireNamespace("crayon")
#' log_layout(layout_glue_colors)
#' log_threshold(TRACE)
#' log_info("Starting the script...")
#' log_debug("This is the second line")
#' log_trace("That is being placed right after the first one.")
#' log_warn("Some errors might come!")
#' log_error("This is a problem")
#' log_debug("Getting an error is usually bad")
#' log_error("This is another problem")
#' log_fatal("The last problem.")
#' log_layout(layout_glue_colors)
#' log_threshold(TRACE)
#' log_info("Starting the script...")
#' log_debug("This is the second line")
#' log_trace("That is being placed right after the first one.")
#' log_warn("Some errors might come!")
#' log_error("This is a problem")
#' log_debug("Getting an error is usually bad")
#' log_error("This is another problem")
#' log_fatal("The last problem.")
layout_glue_colors <- layout_glue_generator(
format = paste(
"{crayon::bold(colorize_by_log_level(level, levelr))}",
Expand All @@ -177,26 +177,23 @@ layout_glue_colors <- layout_glue_generator(
#' }
#' @note This functionality depends on the \pkg{jsonlite} package.
#' @seealso This is a [log_layout()], for alternatives, see [layout_blank()], [layout_simple()], [layout_glue()], [layout_glue_colors()], [layout_json_parser()], or generator functions such as [layout_glue_generator()]

Check warning on line 179 in R/layouts.R

View workflow job for this annotation

GitHub Actions / lint

file=R/layouts.R,line=179,col=121,[line_length_linter] Lines should not be more than 120 characters. This line is 219 characters.
layout_json <- function(fields = c('time', 'level', 'ns', 'ans', 'topenv', 'fn', 'node', 'arch', 'os_name', 'os_release', 'os_version', 'pid', 'user')) {

force(fields)
layout_json <- function(fields = c("time", "level", "ns", "ans", "topenv", "fn", "node", "arch", "os_name", "os_release", "os_version", "pid", "user")) {

Check warning on line 180 in R/layouts.R

View workflow job for this annotation

GitHub Actions / lint

file=R/layouts.R,line=180,col=121,[line_length_linter] Lines should not be more than 120 characters. This line is 153 characters.
force(fields)

structure(function(level, msg, namespace = NA_character_,
.logcall = sys.call(), .topcall = sys.call(-1), .topenv = parent.frame()) {
fail_on_missing_package("jsonlite")

meta <- logger_meta_env(
log_level = level,
namespace = namespace,
.logcall = .logcall,
.topcall = .topcall,
.topenv = .topenv
)
json <- mget(fields, meta)
sapply(msg, function(msg) jsonlite::toJSON(c(json, list(msg = msg)), auto_unbox = TRUE))

}, generator = deparse(match.call()))

meta <- logger_meta_env(
log_level = level,
namespace = namespace,
.logcall = .logcall,
.topcall = .topcall,
.topenv = .topenv
)
json <- mget(fields, meta)
sapply(msg, function(msg) jsonlite::toJSON(c(json, list(msg = msg)), auto_unbox = TRUE))
}, generator = deparse(match.call()))
}


Expand All @@ -218,23 +215,25 @@ layout_json <- function(fields = c('time', 'level', 'ns', 'ans', 'topenv', 'fn',
#' log_layout(layout_json_parser(fields = c("time", "node")))
#' log_info(cars = row.names(mtcars), species = unique(iris$Species))
#' }
layout_json_parser <- function(fields = c("time", "level", "ns", "ans", "topenv", "fn", "node", "arch",
"os_name", "os_release", "os_version", "pid", "user")) {
layout_json_parser <- function(fields = c(
"time", "level", "ns", "ans", "topenv", "fn", "node", "arch",

Check warning on line 219 in R/layouts.R

View workflow job for this annotation

GitHub Actions / lint

file=R/layouts.R,line=219,col=33,[indentation_linter] Indentation should be 2 spaces but is 33 spaces.
"os_name", "os_release", "os_version", "pid", "user"
)) {
force(fields)

structure(function(level, msg, namespace = NA_character_,
.logcall = sys.call(), .topcall = sys.call(-1), .topenv = parent.frame()) {
fail_on_missing_package("jsonlite")

meta <- logger_meta_env(
log_level = level,
namespace = namespace,
.logcall = .logcall,
.topcall = .topcall,
.topenv = .topenv
)
meta <- mget(fields, meta)
msg <- jsonlite::fromJSON(msg)
meta <- logger_meta_env(
log_level = level,
namespace = namespace,
.logcall = .logcall,
.topcall = .topcall,
.topenv = .topenv
)
meta <- mget(fields, meta)
msg <- jsonlite::fromJSON(msg)

jsonlite::toJSON(c(meta, msg), auto_unbox = TRUE, null = "null")
}, generator = deparse(match.call()))
Expand Down
59 changes: 28 additions & 31 deletions R/logger-meta.R
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ logger_meta_env <- function(log_level = NULL,
.topcall = sys.call(-1),
.topenv = parent.frame(),
parent = emptyenv()) {

timestamp <- Sys.time()

env <- new.env(parent = parent)
env$ns <- namespace
env$ans <- fallback_namespace(namespace)

force(.topcall); force(.topenv)
delayedAssign('fn', deparse_to_one_line(.topcall[[1]]), assign.env = env)
delayedAssign('call', deparse_to_one_line(.topcall), assign.env = env)
delayedAssign('topenv', top_env_name(.topenv), assign.env = env)
force(.topcall)
force(.topenv)
delayedAssign("fn", deparse_to_one_line(.topcall[[1]]), assign.env = env)
delayedAssign("call", deparse_to_one_line(.topcall), assign.env = env)
delayedAssign("topenv", top_env_name(.topenv), assign.env = env)

env$time <- timestamp
env$levelr <- log_level
env$level <- attr(log_level, 'level')
env$level <- attr(log_level, "level")

delayedAssign("pid", Sys.getpid(), assign.env = env)

Expand All @@ -32,12 +32,12 @@ logger_meta_env <- function(log_level = NULL,

# stuff from Sys.info
delayedAssign(".sysinfo", Sys.info())
delayedAssign("node", .sysinfo[['nodename']], assign.env = env)
delayedAssign("arch", .sysinfo[['machine']], assign.env = env)
delayedAssign("os_name", .sysinfo[['sysname']], assign.env = env)
delayedAssign("os_release", .sysinfo[['release']], assign.env = env)
delayedAssign("os_version", .sysinfo[['version']], assign.env = env)
delayedAssign("user", .sysinfo[['user']], assign.env = env)
delayedAssign("node", .sysinfo[["nodename"]], assign.env = env)
delayedAssign("arch", .sysinfo[["machine"]], assign.env = env)
delayedAssign("os_name", .sysinfo[["sysname"]], assign.env = env)
delayedAssign("os_release", .sysinfo[["release"]], assign.env = env)
delayedAssign("os_version", .sysinfo[["version"]], assign.env = env)
delayedAssign("user", .sysinfo[["user"]], assign.env = env)

env
}
Expand Down Expand Up @@ -80,34 +80,31 @@ get_logger_meta_variables <- function(log_level = NULL,
.logcall = sys.call(),
.topcall = sys.call(-1),
.topenv = parent.frame()) {

sysinfo <- Sys.info()
timestamp <- Sys.time()

list(
ns = namespace,
ans = fallback_namespace(namespace),
topenv = top_env_name(.topenv),
fn = deparse_to_one_line(.topcall[[1]]),
call = deparse_to_one_line(.topcall),

time = timestamp,
levelr = log_level,
level = attr(log_level, 'level'),

pid = Sys.getpid(),
ns = namespace,
ans = fallback_namespace(namespace),
topenv = top_env_name(.topenv),
fn = deparse_to_one_line(.topcall[[1]]),
call = deparse_to_one_line(.topcall),
time = timestamp,
levelr = log_level,
level = attr(log_level, "level"),
pid = Sys.getpid(),

## R and ns package versions
r_version = paste0(R.Version()[c('major', 'minor')], collapse = '.'),
r_version = paste0(R.Version()[c("major", "minor")], collapse = "."),
ns_pkg_version = tryCatch(as.character(packageVersion(namespace)), error = function(e) NA_character_),

## stuff from Sys.info
node = sysinfo[['nodename']],
arch = sysinfo[['machine']],
os_name = sysinfo[['sysname']],
os_release = sysinfo[['release']],
os_version = sysinfo[['version']],
user = sysinfo[['user']]
node = sysinfo[["nodename"]],
arch = sysinfo[["machine"]],
os_name = sysinfo[["sysname"]],
os_release = sysinfo[["release"]],
os_version = sysinfo[["version"]],
user = sysinfo[["user"]]
## NOTE might be better to rely on the whoami pkg?

## TODO jenkins (or any) env vars => no need to get here, users can write custom layouts
Expand Down
2 changes: 2 additions & 0 deletions man/get_logger_meta_variables.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions man/layout_glue_colors.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions man/layout_json.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions tests/testthat/test-layout.R
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ test_that("JSON layout", {
expect_equal(jsonlite::fromJSON(capture.output(log_info("foobar")))$msg, "foobar")
})

test_that('JSON parser layout', {
local_test_logger(layout = layout_json_parser(fields = character()))
expect_output(log_info(skip_formatter('{"x": 4}')), '\\{"x":4\\}')
expect_equal(capture.output(log_info(skip_formatter('{"x": 4}'))), '{"x":4}')
test_that("JSON parser layout", {
local_test_logger(layout = layout_json_parser(fields = character()))
expect_output(log_info(skip_formatter('{"x": 4}')), '\\{"x":4\\}')
expect_equal(capture.output(log_info(skip_formatter('{"x": 4}'))), '{"x":4}')
})

test_that("must throw errors", {
Expand Down

0 comments on commit 56a22c7

Please sign in to comment.