From 9cdf46d54ed2e400a0499db83ff71591b415b05f Mon Sep 17 00:00:00 2001 From: But2ene Date: Tue, 12 Dec 2017 12:06:23 +0100 Subject: [PATCH 1/4] buffer messages before writing to file Add two properties to the logging class bufferMessages : The first is a cell array that contains messages to be written. bufferCursor_ is an integer that points to next cell to write in bufferMessages_ During logging, messages are added to buffer. Once it's full, log lines are written on file. This new feature have no impact on logging on console. A new method called setBufferingSize was created to change buffer size, on the model of the others methods --- +logging/logging.m | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/+logging/logging.m b/+logging/logging.m index 39ebe20..9657eb0 100644 --- a/+logging/logging.m +++ b/+logging/logging.m @@ -51,12 +51,15 @@ datefmt_ = 'yyyy-mm-dd HH:MM:SS,FFF'; logLevel_ = logging.logging.INFO; commandWindowLevel_ = logging.logging.INFO; + bufferedMessages_ = cell(1); + bufferCursor_ = 1; end properties (Dependent) datefmt; logLevel; commandWindowLevel; + bufferingSize; end methods(Static) @@ -94,6 +97,10 @@ function setCommandWindowLevel(self, level) function setLogLevel(self, level) self.logLevel = level; end + + function setBufferingSize(self, bufferSize) + self.bufferingSize = bufferSize; + end function tf = ignoreLogging(self) tf = self.commandWindowLevel_ == self.OFF && self.logLevel_ == self.OFF; @@ -142,12 +149,14 @@ function critical(self, message) p.addParameter('logLevel', self.logLevel); p.addParameter('commandWindowLevel', self.commandWindowLevel); p.addParameter('datefmt', self.datefmt_); + p.addParameter('bufferingSize', 1); p.parse(name, varargin{:}); r = p.Results; self.name = r.name; self.commandWindowLevel = r.commandWindowLevel; self.datefmt = r.datefmt; + self.setBufferingSize(r.bufferingSize); if ~isempty(r.path) self.setFilename(r.path); % Opens the log file. self.logLevel = r.logLevel; @@ -184,7 +193,13 @@ function writeLog(self, level, caller, message) end if self.logLevel_ <= level && self.logfid > -1 - fprintf(self.logfid, logline); + self.bufferedMessages_(self.bufferCursor_) = logline; + if self.bufferCursor_ == numel(self.bufferedMessages_) + cellfun(@(x) fprintf(self.logfid, x), self.bufferedMessages_); + self.bufferCursor_ = 1; + else + self.bufferCursor_ = self.bufferCursor_ + 1; + end end end @@ -220,6 +235,20 @@ function writeLog(self, level, caller, message) function level = get.commandWindowLevel(self) level = self.commandWindowLevel_; end + + function set.bufferingSize(self, bufferSize) + validateattribute(bufferSize, {'numeric'}, {'scalar', 'integer', 'nonzero', 'positive'}); + n = numel(self.bufferedMessages_); + if bufferSize > n + self.bufferedMessages_ = [self.bufferedMessages_ cell(bufferSize - n)]; + else + self.bufferedMessages_ = self.bufferedMessages_(1:bufferSize); + end + end + + function bufferSize = get.bufferingSize(self) + bufferSize = numel(self.bufferedMessages_); + end end From 33d0d7937b0fd3b2a84ccf61e8f99c3701311c9c Mon Sep 17 00:00:00 2001 From: But2ene Date: Tue, 12 Dec 2017 14:54:32 +0100 Subject: [PATCH 2/4] correct a typo in validateattributes call function --- +logging/logging.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/+logging/logging.m b/+logging/logging.m index 9657eb0..8275afb 100644 --- a/+logging/logging.m +++ b/+logging/logging.m @@ -237,7 +237,7 @@ function writeLog(self, level, caller, message) end function set.bufferingSize(self, bufferSize) - validateattribute(bufferSize, {'numeric'}, {'scalar', 'integer', 'nonzero', 'positive'}); + validateattributes(bufferSize, {'numeric'}, {'scalar', 'integer', 'nonzero', 'positive'}); n = numel(self.bufferedMessages_); if bufferSize > n self.bufferedMessages_ = [self.bufferedMessages_ cell(bufferSize - n)]; From a4ceafec5f8744776fa8925e2bcb47cbf86a24eb Mon Sep 17 00:00:00 2001 From: But2ene Date: Tue, 12 Dec 2017 15:07:23 +0100 Subject: [PATCH 3/4] correct cell format --- +logging/logging.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/+logging/logging.m b/+logging/logging.m index 8275afb..c7c92da 100644 --- a/+logging/logging.m +++ b/+logging/logging.m @@ -193,7 +193,7 @@ function writeLog(self, level, caller, message) end if self.logLevel_ <= level && self.logfid > -1 - self.bufferedMessages_(self.bufferCursor_) = logline; + self.bufferedMessages_{self.bufferCursor_} = logline; if self.bufferCursor_ == numel(self.bufferedMessages_) cellfun(@(x) fprintf(self.logfid, x), self.bufferedMessages_); self.bufferCursor_ = 1; @@ -240,7 +240,7 @@ function writeLog(self, level, caller, message) validateattributes(bufferSize, {'numeric'}, {'scalar', 'integer', 'nonzero', 'positive'}); n = numel(self.bufferedMessages_); if bufferSize > n - self.bufferedMessages_ = [self.bufferedMessages_ cell(bufferSize - n)]; + self.bufferedMessages_ = [self.bufferedMessages_ cell(1, bufferSize - n)]; else self.bufferedMessages_ = self.bufferedMessages_(1:bufferSize); end From 6b90bf10891ad1b62b948cc077b9ca7ca2d0453f Mon Sep 17 00:00:00 2001 From: But2ene Date: Tue, 12 Dec 2017 15:10:59 +0100 Subject: [PATCH 4/4] update README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index efe645f..ab6b0a9 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,8 @@ The available arguments are: This contains the date/time format string used by the logs. The format must be compatible with the built-in `datestr` function. This must be a string. +* `bufferingSize` : set the number buffered logging lines berfore writing to file. + Must be a positive integer. If `logger` is an instance of the `logging` class, the following methods can be used to log output at different levels: