Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

log_formater disables layout_glue_generator #151

Open
camult opened this issue Mar 28, 2024 · 2 comments
Open

log_formater disables layout_glue_generator #151

camult opened this issue Mar 28, 2024 · 2 comments

Comments

@camult
Copy link

camult commented Mar 28, 2024

Is there a way to use the layout_glue_generator and formatter_pander?

library("logger")

logfile <- "log.txt"
FMLN <- "Something"

logger::log_formatter(formatter_pander)
logLayout <- "{node} \t {user} \t {pid} \t {time} \t {fn} \t {FMLN} \t {level} \t {msg}\n"
logger <- logger::layout_glue_generator(format = logLayout)
logger::log_layout(logger)
logger::log_threshold(TRACE)
RULE  <<- structure(510L, level = "RULE",  class = c("loglevel", "integer"))
TIME  <<- structure(520L, level = "TIME",  class = c("loglevel", "integer"))
COUNT <<- structure(530L, level = "COUNT", class = c("loglevel", "integer"))
logger::log_appender(logger::appender_tee(logfile))
logger::log_level(TIME, "Program Started on {format(Sys.time(), '%b %d %Y at %I:%M %p')}")
logger::log_info("Using {as.character(R.Version()$version.string)}")
logger::log_info(data.frame(a = 1:3, b = 4:6))

Results

server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 TIME 	 Program Started on Mar 28 2024 at 01:06 PM
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	 Using R version 4.2.1 (2022-06-23)
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	 
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	 -------
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	  a   b 
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	 --- ---
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	  1   4 
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	 
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	  2   5 
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	 
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	  3   6 
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	 -------
server 	 brito 	 2926921 	 2024-03-28 13:06:16 	 NA 	 Rules Engine 	 INFO 	 
server 	 brito 	 2926921 	 2024-03-28 13:06:33 	 NA 	 Rules Engine 	 TIME 	 Program Started on {format(Sys.time(), '%b %d %Y at %I:%M %p')}
@camult camult added the bug Something isn't working label Mar 28, 2024
@camult
Copy link
Author

camult commented Apr 3, 2024

Suggestion...

formatter_glue_pander <- structure(function(..., .logcall = sys.call(), .topcall = sys.call(-1), .topenv = parent.frame()) {
  if (any(class(...) %in% c("data.table", "data.frame", "matrix"))) {
    fail_on_missing_package('pander')
    eval(pander::pander_return(...), envir = .topenv)
  } else {
    fail_on_missing_package('glue')
    as.character(
      tryCatch(
        glue::glue(..., .envir = .topenv),
        error = function(e) {
          stop(paste(
            '`glue_safe` failed in `formatter_glue_safe` on:\n\n',
            capture.output(str(...)),
            '\n\nRaw error message:\n\n',
            e$message,
            '\n\nPlease consider using another `log_formatter` or',
            '`skip_formatter` on strings with curly braces.'))
        }))
  }
}, generator = quote(formatter_glue_pander()))

@daroczig
Copy link
Owner

Although I like the idea, I'm not sure how to decide when to use pander and glue, and I think it might depend on the user, so I'm hesitant to offer a bundled solution in the package.

Might be cleaner to wrap whatever R object you want to convert in pander before passing to logger?

@daroczig daroczig removed the bug Something isn't working label Oct 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants