Skip to content

Commit e92ebcf

Browse files
committed
rework intialization of logging
1 parent 40705be commit e92ebcf

File tree

8 files changed

+53
-28
lines changed

8 files changed

+53
-28
lines changed

.vscode/launch.json

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,19 @@
136136
"args": [
137137
"--mode",
138138
"tcp",
139+
"--log",
140+
"--log-colored",
141+
"--log-level",
142+
"TRACE",
143+
//"--log-json-rpc-data",
144+
"--log-json-rpc",
145+
//"--log-language-server",
146+
//"--log-robotframework",
147+
//"--debug-asyncio",
148+
//"--log-asyncio"
139149
//"--call-tracing",
140-
"--log-config",
141-
"log.ini"
150+
// "--log-config",
151+
// "log.ini"
142152
]
143153
},
144154
{

robotcode/debugger/__main__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -356,17 +356,17 @@ def main() -> None:
356356
pass
357357

358358
if not log_initialized:
359-
logging.basicConfig(level=log_level)
359+
logging.basicConfig(level=log_level, format="%(name)s:%(levelname)s: %(message)s")
360360

361361
if args.log_file is not None:
362362
_logger.logger.addHandler(get_log_handler(args.log_file))
363363

364364
if not args.log_asyncio:
365-
logging.getLogger("asyncio").propagate = False
365+
logging.getLogger("asyncio").level = logging.CRITICAL
366366

367367
if not args.log_debugger:
368-
logging.getLogger("robotcode.debugger").propagate = False
369-
logging.getLogger("robotcode.debugger").disabled = True
368+
logging.getLogger("robotcode.debugger").level = logging.CRITICAL
369+
logging.getLogger("robotcode.debugger").level = logging.CRITICAL
370370

371371
_logger.info(f"starting {__package__} version={__version__}")
372372
_logger.debug(f"args={args}")

robotcode/debugger/launcher/__main__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,16 +134,16 @@ def main() -> None:
134134
pass
135135

136136
if not log_initialized:
137-
logging.basicConfig(level=log_level)
137+
logging.basicConfig(level=log_level, format="%(name)s:%(levelname)s: %(message)s")
138138

139139
if args.log_file is not None:
140140
_logger.logger.addHandler(get_log_handler(args.log_file))
141141

142142
if not args.log_asyncio:
143-
logging.getLogger("asyncio").propagate = False
143+
logging.getLogger("asyncio").level = logging.CRITICAL
144144

145145
if not args.log_debugger_launcher:
146-
logging.getLogger("robotcode.debugger.launcher").propagate = False
146+
logging.getLogger("robotcode.debugger.launcher").level = logging.CRITICAL
147147

148148
_logger.info(f"starting debugger launcher server version={__version__}")
149149
_logger.debug(f"args={args}")

robotcode/jsonrpc2/protocol.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,7 @@ def _handle_body(self, body: bytes, charset: str) -> None:
417417

418418
class JsonRPCProtocol(JsonRPCProtocolBase):
419419
_logger = LoggingDescriptor()
420+
_data_logger = LoggingDescriptor(postfix="_data")
420421

421422
def __init__(self) -> None:
422423
super().__init__()
@@ -506,6 +507,7 @@ def send_error(
506507
)
507508
)
508509

510+
@_logger.call
509511
def send_message(self, message: JsonRPCMessage) -> None:
510512
message.jsonrpc = PROTOCOL_VERSION
511513

@@ -517,7 +519,11 @@ def send_message(self, message: JsonRPCMessage) -> None:
517519

518520
if self.write_transport is not None:
519521
msg = header + body
520-
self.write_transport.write(msg)
522+
523+
self._data_logger.trace(lambda: f"JSON Message: {msg.decode()}")
524+
525+
if self._loop:
526+
self._loop.call_soon_threadsafe(self.write_transport.write, msg)
521527

522528
@_logger.call
523529
def send_request(

robotcode/language_server/__main__.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ def create_parser() -> argparse.ArgumentParser:
101101

102102
result.add_argument("--log", action="store_true", help="enable logging")
103103
result.add_argument("--log-json-rpc", action="store_true", help="show json-rpc log messages")
104+
result.add_argument("--log-json-rpc-data", action="store_true", help="show json-rpc-data log messages")
104105
result.add_argument("--log-language-server", action="store_true", help="show language server log messages")
105106
result.add_argument(
106107
"--log-language-server-parts", action="store_true", help="show language server parts log messages"
@@ -145,25 +146,23 @@ def init_logging(args: argparse.Namespace) -> None:
145146
log_initialized = init_colored_logs(log_level)
146147

147148
if not log_initialized:
148-
logging.basicConfig(level=log_level)
149+
logging.basicConfig(level=log_level, format="%(name)s:%(levelname)s: %(message)s")
149150

150151
if args.log_file is not None:
151152
_logger.logger.addHandler(get_log_handler(args.log_file))
152153

153-
if not args.log_asyncio:
154-
logging.getLogger("asyncio").propagate = False
155-
156-
if not args.log_json_rpc:
157-
logging.getLogger("robotcode.jsonrpc2").propagate = False
158-
159-
if not args.log_language_server:
160-
logging.getLogger("robotcode.language_server.common").propagate = False
161-
162-
if not args.log_language_server_parts:
163-
logging.getLogger("robotcode.language_server.common.parts").propagate = False
164-
165154
if not args.log_robotframework:
166-
logging.getLogger("robotcode.language_server.robotframework").propagate = False
155+
logging.getLogger("robotcode.language_server.robotframework").level = logging.CRITICAL
156+
if not args.log_language_server_parts:
157+
logging.getLogger("robotcode.language_server.common.parts").level = logging.CRITICAL
158+
if not args.log_language_server:
159+
logging.getLogger("robotcode.language_server.common").level = logging.CRITICAL
160+
if not args.log_json_rpc:
161+
logging.getLogger("robotcode.jsonrpc2").level = logging.CRITICAL
162+
if not args.log_json_rpc_data:
163+
logging.getLogger("robotcode.jsonrpc2.protocol.JsonRPCProtocol_data").level = logging.CRITICAL
164+
if not args.log_asyncio:
165+
logging.getLogger("asyncio").level = logging.CRITICAL
167166

168167

169168
def main() -> None:

robotcode/language_server/common/parts/completion.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,15 @@ async def _text_document_completion(
114114
is_incomplete=any(e for e in results if isinstance(e, CompletionList) and e.is_incomplete),
115115
items=[e for e in chain(*[r.items if isinstance(r, CompletionList) else r for r in results])],
116116
)
117+
if len(result.items) == 0:
118+
return None
117119
return result
118120
else:
119-
return [e for e in chain(*[k for k in results if isinstance(k, list)])]
121+
result = [e for e in chain(*[k for k in results if isinstance(k, list)])]
122+
if len(result) == 0:
123+
return None
124+
125+
return result
120126

121127
return None
122128

robotcode/utils/dataclasses.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def from_dict(value: Any, types: Union[Type[_T], Tuple[Type[_T], ...], None] = N
157157
args = get_args(t)
158158
origin = get_origin(t)
159159

160-
if origin is Union: # TODO pylance shows an error here, but it's ok for mypy?
160+
if origin is Union:
161161
return cast(_T, from_dict(value, args))
162162

163163
if origin is Literal:

robotcode/utils/logging.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ class _HasLoggerEntries:
7373
_F = TypeVar("_F", bound=Callable[..., Any])
7474

7575

76+
class LoggerException(Exception):
77+
pass
78+
79+
7680
class CallState(Enum):
7781
ENTERING = "entering"
7882
EXITING = "exiting"
@@ -150,7 +154,7 @@ def logger(self) -> logging.Logger:
150154
self.__init_logger()
151155

152156
if self.__logger is None:
153-
raise Exception("Logger not initialized")
157+
raise LoggerException("Logger not initialized")
154158

155159
return self.__logger
156160

@@ -176,7 +180,7 @@ def log(
176180
stacklevel: int = 2,
177181
**kwargs: Any,
178182
) -> None:
179-
if self.is_enabled_for(level) and (condition is not None and condition() or condition is None):
183+
if self.is_enabled_for(level) and condition is not None and condition() or condition is None:
180184
self.logger.log(level, msg() if callable(msg) else msg, *args, stacklevel=stacklevel, **kwargs)
181185

182186
def debug(

0 commit comments

Comments
 (0)