PythonRemoteServer
PythonRemoteServer copied to clipboard
Support logging using `robot.api.logger` and `logging` APIs
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.