Skip to content

Commit 37b551a

Browse files
committed
[core] add trace log level and add new "loglevel" internal input for node default log level
1 parent 7d27047 commit 37b551a

File tree

4 files changed

+45
-15
lines changed

4 files changed

+45
-15
lines changed

bin/meshroom_batch

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import distutils.util
66
import json
77
import re
88

9-
from meshroom import setupEnvironment
9+
from meshroom import setupEnvironment, logStringToPython
1010

1111
setupEnvironment()
1212

@@ -131,14 +131,6 @@ advanced_group.add_argument(
131131
args = parser.parse_args()
132132

133133

134-
logStringToPython = {
135-
'fatal': logging.FATAL,
136-
'error': logging.ERROR,
137-
'warning': logging.WARNING,
138-
'info': logging.INFO,
139-
'debug': logging.DEBUG,
140-
'trace': logging.DEBUG,
141-
}
142134
logging.getLogger().setLevel(logStringToPython[args.verbose])
143135

144136
if not args.input and not args.inputRecursive:

meshroom/__init__.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,32 @@ class VersionStatus(Enum):
4848

4949
useMultiChunks = util.strtobool(os.environ.get("MESHROOM_USE_MULTI_CHUNKS", "True"))
5050

51+
# Logging
52+
53+
def addTraceLevel():
54+
""" From https://stackoverflow.com/a/35804945 """
55+
levelName, methodName, levelNum = 'TRACE', 'trace', logging.DEBUG - 5
56+
if hasattr(logging, levelName) or hasattr(logging, methodName)or hasattr(logging.getLoggerClass(), methodName):
57+
return
58+
def logForLevel(self, message, *args, **kwargs):
59+
if self.isEnabledFor(levelNum):
60+
self._log(levelNum, message, args, **kwargs)
61+
def logToRoot(message, *args, **kwargs):
62+
logging.log(levelNum, message, *args, **kwargs)
63+
64+
logging.addLevelName(levelNum, levelName)
65+
setattr(logging, levelName, levelNum)
66+
setattr(logging.getLoggerClass(), methodName, logForLevel)
67+
setattr(logging, methodName, logToRoot)
68+
69+
addTraceLevel()
5170
logStringToPython = {
52-
'fatal': logging.FATAL,
71+
'fatal': logging.CRITICAL,
5372
'error': logging.ERROR,
5473
'warning': logging.WARNING,
5574
'info': logging.INFO,
5675
'debug': logging.DEBUG,
57-
'trace': logging.DEBUG,
76+
'trace': logging.TRACE,
5877
}
5978
logging.getLogger().setLevel(logStringToPython[os.environ.get('MESHROOM_VERBOSE', 'warning')])
6079

meshroom/core/desc/node.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import sys
1010

1111
from .computation import Level, StaticNodeSize
12-
from .attribute import StringParam, ColorParam
12+
from .attribute import StringParam, ColorParam, ChoiceParam
1313

1414
import meshroom
1515
from meshroom.core import cgroup
@@ -71,6 +71,14 @@ class BaseNode(object):
7171
value="",
7272
invalidate=False,
7373
),
74+
ChoiceParam(
75+
name='loglevel',
76+
label='Default logging level',
77+
description='''Default logging level for the node (critical, error, warning, info, debug).''',
78+
value='info',
79+
values=['critical', 'error', 'warning', 'info', 'debug', 'trace'],
80+
invalidate=False,
81+
),
7482
ColorParam(
7583
name="color",
7684
label="Color",

meshroom/core/node.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,8 @@ def completeProgressBar(self):
309309

310310
@staticmethod
311311
def textToLevel(text):
312-
if text == "critical":
312+
text = text.lower()
313+
if text in ["critical", "fatal"]:
313314
return logging.CRITICAL
314315
elif text == "error":
315316
return logging.ERROR
@@ -319,6 +320,8 @@ def textToLevel(text):
319320
return logging.INFO
320321
elif text == "debug":
321322
return logging.DEBUG
323+
elif text == "trace":
324+
return logging.TRACE
322325
else:
323326
return logging.NOTSET
324327

@@ -725,6 +728,15 @@ def getLabel(self):
725728
return label
726729
return self.getDefaultLabel()
727730

731+
def getLogLevel(self):
732+
"""
733+
Returns:
734+
str: the user-provided log level used for logging on process launched by this node
735+
"""
736+
if self.hasInternalAttribute("loglevel"):
737+
return self.internalAttribute("loglevel").value.strip()
738+
return "info"
739+
728740
def getColor(self):
729741
"""
730742
Returns:
@@ -1315,8 +1327,7 @@ def prepareLogger(self, iteration=-1):
13151327
# Setup logger
13161328
rootLogger = logging.getLogger()
13171329
self._logManager = LogManager(rootLogger, logFile)
1318-
self._logManager.configureLogger()
1319-
rootLogger.setLevel(logging.INFO) # Set info by default
1330+
self._logManager.start(self.getLogLevel())
13201331

13211332
def restoreLogger(self):
13221333
self._logManager.restorePreviousLogger()

0 commit comments

Comments
 (0)