From 63f46a56e52c420cd3b5bd1745df1bd6df75e57a Mon Sep 17 00:00:00 2001 From: Swaraj Patil Date: Thu, 16 Jul 2026 12:00:09 -0400 Subject: [PATCH 1/3] Remove log4r dependency (replace with base R logging) --- DESCRIPTION | 3 +- NAMESPACE | 2 -- R/utils_logging.R | 55 ++++++++++++++++++++++++------- man/dot-consoleAppender.Rd | 12 +++++++ man/dot-fileAppender.Rd | 12 +++++++ man/dot-formatLogMessage.Rd | 13 ++++++++ man/dot-nullAppender.Rd | 2 +- vignettes/msstats_data_format.Rmd | 2 +- 8 files changed, 83 insertions(+), 18 deletions(-) create mode 100644 man/dot-consoleAppender.Rd create mode 100644 man/dot-fileAppender.Rd create mode 100644 man/dot-formatLogMessage.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 129220e31..b95911563 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: MSstatsConvert Title: Import Data from Various Mass Spectrometry Signal Processing Tools to MSstats Format -Version: 1.23.2 +Version: 1.23.3 Authors@R: c( person("Mateusz", "Staniak", email = "mtst@mstaniak.pl", role = "aut"), person("Devon", "Kohler", email = "kohler.d@northeastern.edu", role = "aut"), @@ -19,7 +19,6 @@ Depends: R (>= 4.0) Imports: data.table, - log4r, methods, checkmate, utils, diff --git a/NAMESPACE b/NAMESPACE index e51cffd66..94f287cf4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -42,8 +42,6 @@ importFrom(data.table,melt) importFrom(data.table,rbindlist) importFrom(data.table,setnames) importFrom(data.table,uniqueN) -importFrom(log4r,console_appender) -importFrom(log4r,file_appender) importFrom(methods,new) importFrom(stats,na.omit) importFrom(utils,sessionInfo) diff --git a/R/utils_logging.R b/R/utils_logging.R index a606ea50e..e5000e8ca 100644 --- a/R/utils_logging.R +++ b/R/utils_logging.R @@ -1,4 +1,4 @@ -#' log4r appender used not to write messages +#' Appender used not to write messages #' #' A convenience function written to save time on checking if messages should #' be printed or logs should be written to a file. @@ -12,9 +12,41 @@ } +#' Format a log line as "LEVEL [timestamp] message" +#' +#' Message parts are joined with paste0, never sprintf, so a literal percent +#' sign is written verbatim. +#' @keywords internal +.formatLogMessage = function(level, ...) { + timestamp = format(Sys.time(), "%Y-%m-%d %H:%M:%S") + level_field = formatC(level, width = 5L, flag = "-") + paste0(level_field, " [", timestamp, "] ", paste0(..., collapse = ""), "\n") +} + + +#' File appender: returns a function(level, ...) that writes one line to a file +#' @keywords internal +.fileAppender = function(log_file_path, append = TRUE) { + force(log_file_path) + force(append) + function(level, ...) { + cat(.formatLogMessage(level, ...), file = log_file_path, sep = "", + append = append) + } +} + + +#' Console appender: returns a function(level, ...) that writes one line to console +#' @keywords internal +.consoleAppender = function() { + function(level, ...) { + cat(.formatLogMessage(level, ...)) + } +} + + #' Set default logging object when package is loaded #' @param ... ignored -#' @importFrom log4r file_appender console_appender #' @return none, sets options called MSstatsLog and MSstatsMsg #' @keywords internal .onLoad = function(...) { @@ -24,11 +56,11 @@ path = paste0("./MSstats_log_", gsub("[ :\\-]", "_", time_now), ".log") if (is.null(logs)) { - ms_logs = file_appender(path) + ms_logs = .fileAppender(path) options(MSstatsLog = ms_logs) } if (is.null(msgs)) { - ms_messages = console_appender() + ms_messages = .consoleAppender() options(MSstatsMsg = ms_messages) } } @@ -79,24 +111,23 @@ MSstatsLogsSettings = function(use_log_file = TRUE, append = FALSE, if (use_log_file) { if (!is.null(log_file_path)) { - file_appender = log4r::file_appender(log_file_path, - append = append) + file_logger = .fileAppender(log_file_path, append = append) } else { time_now = Sys.time() log_file_path = paste0(base, gsub("[ :\\-]", "_", time_now), ".log") - file_appender = log4r::file_appender(log_file_path) + file_logger = .fileAppender(log_file_path) } } else { - file_appender = .nullAppender + file_logger = .nullAppender } - + if (verbose) { - console_appender = console_appender() + console_logger = .consoleAppender() } else { - console_appender = .nullAppender + console_logger = .nullAppender } - loggers = list(file_appender, console_appender) + loggers = list(file_logger, console_logger) names(loggers) = paste0(pkg_name, c("Log", "Msg")) do.call(options, loggers) invisible(TRUE) diff --git a/man/dot-consoleAppender.Rd b/man/dot-consoleAppender.Rd new file mode 100644 index 000000000..bc6a5f509 --- /dev/null +++ b/man/dot-consoleAppender.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils_logging.R +\name{.consoleAppender} +\alias{.consoleAppender} +\title{Console appender: returns a function(level, ...) that writes one line to console} +\usage{ +.consoleAppender() +} +\description{ +Console appender: returns a function(level, ...) that writes one line to console +} +\keyword{internal} diff --git a/man/dot-fileAppender.Rd b/man/dot-fileAppender.Rd new file mode 100644 index 000000000..9dbb269ed --- /dev/null +++ b/man/dot-fileAppender.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils_logging.R +\name{.fileAppender} +\alias{.fileAppender} +\title{File appender: returns a function(level, ...) that writes one line to a file} +\usage{ +.fileAppender(log_file_path, append = TRUE) +} +\description{ +File appender: returns a function(level, ...) that writes one line to a file +} +\keyword{internal} diff --git a/man/dot-formatLogMessage.Rd b/man/dot-formatLogMessage.Rd new file mode 100644 index 000000000..907fb77b9 --- /dev/null +++ b/man/dot-formatLogMessage.Rd @@ -0,0 +1,13 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils_logging.R +\name{.formatLogMessage} +\alias{.formatLogMessage} +\title{Format a log line as "LEVEL \link{timestamp} message"} +\usage{ +.formatLogMessage(level, ...) +} +\description{ +Message parts are joined with paste0, never sprintf, so a literal percent +sign is written verbatim. +} +\keyword{internal} diff --git a/man/dot-nullAppender.Rd b/man/dot-nullAppender.Rd index b00fe61ef..8da0e0170 100644 --- a/man/dot-nullAppender.Rd +++ b/man/dot-nullAppender.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/utils_logging.R \name{.nullAppender} \alias{.nullAppender} -\title{log4r appender used not to write messages} +\title{Appender used not to write messages} \usage{ .nullAppender(level, ...) } diff --git a/vignettes/msstats_data_format.Rmd b/vignettes/msstats_data_format.Rmd index 2115f1c5f..982f331f1 100644 --- a/vignettes/msstats_data_format.Rmd +++ b/vignettes/msstats_data_format.Rmd @@ -75,7 +75,7 @@ to store fraction labels. # Logging -`MSstatsConvert` allows for flexible logging based on the `log4r` package. +`MSstatsConvert` allows for flexible logging. Information about preprocessing steps can be written to a file, to a console, to both or to neither. The `MSstatsLogsSettings` function helps manage log settings. From 2f897880211a9246649697acb0da2f94a7914b62 Mon Sep 17 00:00:00 2001 From: Swaraj Patil Date: Thu, 16 Jul 2026 12:12:34 -0400 Subject: [PATCH 2/3] Remove bracketed roxygen title --- R/utils_logging.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils_logging.R b/R/utils_logging.R index e5000e8ca..4529a70e8 100644 --- a/R/utils_logging.R +++ b/R/utils_logging.R @@ -12,7 +12,7 @@ } -#' Format a log line as "LEVEL [timestamp] message" +#' Format one log line: level, timestamp, message #' #' Message parts are joined with paste0, never sprintf, so a literal percent #' sign is written verbatim. From 17be83fb23fcca33967cb916b23482652775b828 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Thu, 16 Jul 2026 13:21:09 -0400 Subject: [PATCH 3/3] reset version number --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index b95911563..a9076df79 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: MSstatsConvert Title: Import Data from Various Mass Spectrometry Signal Processing Tools to MSstats Format -Version: 1.23.3 +Version: 1.23.2 Authors@R: c( person("Mateusz", "Staniak", email = "mtst@mstaniak.pl", role = "aut"), person("Devon", "Kohler", email = "kohler.d@northeastern.edu", role = "aut"),