robotframework/PythonRemoteServer

Support logging using `robot.api.logger` and `logging` APIs

vkruoso opened this issue · 5 comments

It would be a nice feature to have if you could have a library that uses the robot.api.logger to log messages to just work when used in a remote server using the PythonRemoteServer.

I am looking for this 'feature' too. It seems very strange not to support Robots own logging in a Robot server.
I know python "print" output is picked up.
But, as an example, I run the OperatingSystem Copy File keyword, but the INFO message gets lost on the remote system somewhere. This needs to be reported back to the output of the calling script.
I tried registering my own logger in my remote library as follows:
class RFremoteLogger(Logger): # Inherit from robot.output.logger.Logger
def message(self, record):
print record
. . .
if name == 'main':
from robotremoteserver import RobotRemoteServer
LOGGER.register_logger(RFremoteLogger)
RobotRemoteServer(MyRemoteLib(), *sys.argv[1:])

But this didn't work. No error, but also no output. I tried some other variations but no luck.
Any suggestions how to get the output?

For anyone else coming here: I solved it with this bit of code in my remote library:

from robot.api import logger

def remote_log_message(message,level,html=False):
print '{} {}'.format(level, message)

logger.write = remote_log_message

This works because most Robot libraries import logger from robot.api - where we replace the definition of write.

@VernonCrabtree Thank you, it's really a easy and best solution.

Yep, official support for robot.api.logger as well as for Python's logging module would be nice.

@VernonCrabtree : works like a charm. Nice workaround.