Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
opencompass
Commits
f4c70ba6
Unverified
Commit
f4c70ba6
authored
Aug 11, 2023
by
Zaida Zhou
Committed by
GitHub
Aug 11, 2023
Browse files
[Feature] Support filtering specified levels message (#187)
* Support filtering message * minor fix
parent
99ae7865
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
69 additions
and
4 deletions
+69
-4
opencompass/utils/logging.py
opencompass/utils/logging.py
+69
-4
No files found.
opencompass/utils/logging.py
View file @
f4c70ba6
import
logging
import
os
from
mmengine.logging
import
MMLogger
from
mmengine.logging
import
MMLogger
_nameToLevel
=
{
'CRITICAL'
:
logging
.
CRITICAL
,
'FATAL'
:
logging
.
FATAL
,
'ERROR'
:
logging
.
ERROR
,
'WARN'
:
logging
.
WARNING
,
'WARNING'
:
logging
.
WARNING
,
'INFO'
:
logging
.
INFO
,
'DEBUG'
:
logging
.
DEBUG
,
'NOTSET'
:
logging
.
NOTSET
,
}
def
get_logger
(
log_level
=
'INFO'
)
->
MMLogger
:
def
get_logger
(
log_level
=
'INFO'
,
filter_duplicate_level
=
None
)
->
MMLogger
:
"""Get the logger for OpenCompass.
"""Get the logger for OpenCompass.
Args:
Args:
log_level (str): The log level. Default: 'INFO'. Choices are 'DEBUG',
log_level (str): The log level. Default: 'INFO'. Choices are 'DEBUG',
'INFO', 'WARNING', 'ERROR', 'CRITICAL'.
'INFO', 'WARNING', 'ERROR', 'CRITICAL'.
"""
"""
return
MMLogger
.
get_instance
(
'OpenCompass'
,
logger
=
MMLogger
.
get_instance
(
'OpenCompass'
,
logger_name
=
'OpenCompass'
,
logger_name
=
'OpenCompass'
,
log_level
=
log_level
)
log_level
=
log_level
)
if
filter_duplicate_level
is
None
:
# export OPENCOMPASS_FILTER_DUPLICATE_LEVEL=error
# export OPENCOMPASS_FILTER_DUPLICATE_LEVEL=error,warning
filter_duplicate_level
=
os
.
getenv
(
'OPENCOMPASS_FILTER_DUPLICATE_LEVEL'
,
None
)
if
filter_duplicate_level
:
logger
.
addFilter
(
FilterDuplicateMessage
(
'OpenCompass'
,
filter_duplicate_level
))
return
logger
class
FilterDuplicateMessage
(
logging
.
Filter
):
"""Filter the repeated message.
Args:
name (str): name of the filter.
"""
def
__init__
(
self
,
name
,
filter_duplicate_level
):
super
().
__init__
(
name
)
self
.
seen
:
set
=
set
()
if
isinstance
(
filter_duplicate_level
,
str
):
filter_duplicate_level
=
filter_duplicate_level
.
split
(
','
)
self
.
filter_duplicate_level
=
[]
for
level
in
filter_duplicate_level
:
_level
=
level
.
strip
().
upper
()
if
_level
not
in
_nameToLevel
:
raise
ValueError
(
f
'Invalid log level:
{
_level
}
'
)
self
.
filter_duplicate_level
.
append
(
_nameToLevel
[
_level
])
def
filter
(
self
,
record
:
logging
.
LogRecord
)
->
bool
:
"""Filter the repeated error message.
Args:
record (LogRecord): The log record.
Returns:
bool: Whether to output the log record.
"""
if
record
.
levelno
not
in
self
.
filter_duplicate_level
:
return
True
if
record
.
msg
not
in
self
.
seen
:
self
.
seen
.
add
(
record
.
msg
)
return
True
return
False
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment