-
Notifications
You must be signed in to change notification settings - Fork 6
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
Handle exceptions raised during log message formatting #12
Open
ruck94301
wants to merge
1
commit into
janklab:main
Choose a base branch
from
ruck94301:implement-throwExceptions
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
function varargout = raiseExceptions(newval) | ||
%RAISEEXCEPTIONS gets/sets a flag for handling exceptions during logging | ||
% RAISEEXCEPTIONS gets or sets a flag that is used by the logic that | ||
% controls the handling of exceptions raised/thrown during logging. | ||
% The default flag value is true. | ||
% | ||
% Usage | ||
% % suppress exceptions during logging framework message handling | ||
% logger.raiseExceptions(false) | ||
|
||
%{ | ||
This mechanism is inspired by a comment from Martijn Pieters in | ||
https://stackoverflow.com/questions/66587941/what-happens-if-a-python-logging-handler-raises-an-exception | ||
|
||
"The Python standard-library handlers have been build with robustness in | ||
mind. If an exception is raised ..., all standard library | ||
implementations catch the exception and ... | ||
By default, ... re-raises the exception. In production systems you want | ||
to set logging.raiseExceptions = False, at which point the exceptions | ||
are silently ignored, and logging continues as if nothing happened. | ||
|
||
From the documentation: ... If the module-level attribute | ||
raiseExceptions is False, exceptions get silently ignored. This is what | ||
is mostly wanted for a logging system - most users will not care about | ||
errors in the logging system, they are more interested in application | ||
errors. ... (The default value of raiseExceptions is True, as that is | ||
more useful during development)." | ||
%} | ||
|
||
persistent flag | ||
|
||
if isempty(flag) | ||
flag = true; | ||
end | ||
|
||
switch nargin | ||
case 0 % get | ||
varargout{1} = flag; | ||
case 1 % set | ||
assert(isscalar(newval) & islogical(newval), 'bad usage') | ||
flag = newval; | ||
otherwise | ||
assert(false, 'impossible') | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
function varargout = throwExceptions(varargin) | ||
%THROWEXCEPTIONS is an alias for RAISEEXCEPTIONS | ||
% RAISEEXCEPTIONS is inspired by the Python standard library | ||
% framework. | ||
% In MATLAB, exceptions are 'thrown' rather than 'raised', so | ||
% THROWEXCEPTIONS is provided as a more MATLAB-consistent alias. | ||
% | ||
% Usage | ||
% % suppress exceptions during logging framework message handling | ||
% logger.throwExceptions(false) | ||
|
||
[varargout{1:nargout}] = logger.raiseExceptions(varargin{:}); |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's back the flag value with appdata, so that its state survives a
clear classes
or other action that clears the raiseException function definition. Something like this:(Oops: I was going to say that SLF4M's code base uses 2-space indents, but it looks like my code actually has a mix of 2-space or 4-space indents, on a per-file basis. And the
.editorconfig
file says it's 4 spaces. I need to pick one and make it all uniform. #13)