sikuli-driver team mailing list archive
-
sikuli-driver team
-
Mailing list archive
-
Message #27432
[Bug 1350735] Re: [request] want options to redirect Sikuli's log messages to my own logging
I tried your java code in Eclipse using Java/Junit. It works as you
indicated.
Then I also tried it using Pydev with Jython in eclipse using the following code:
---
class MyLogger:
def info(self,msg):
print "MyLogger: " + msg
log = MyLogger()
log.info('Directly from the new logger')
Debug.info('from original logger')
Debug.setLogger(log)
Debug.setLoggerAll('info')
Debug.info('From redirected logger ')
---
It resulted in an error similar to the JRuby case:
---
MyLogger: Directly from the new logger
[info] from original logger
[error] Debug: setLoggerInfo: redirecting to info failed:
org.python.core.PyInstance.info(java.lang.String)
[info] From redirected logger
---
I do not have enough experience to cross-debug a Jython application though
They pydev debugger just steps through the above w/o going into it.
--
You received this bug notification because you are a member of Sikuli
Drivers, which is subscribed to Sikuli.
https://bugs.launchpad.net/bugs/1350735
Title:
[request] want options to redirect Sikuli's log messages to my own
logging
Status in Sikuli:
In Progress
Bug description:
A previous thread that is closest to answering my current question is:
https://answers.launchpad.net/sikuli/+question/248604
in which RaiMan suggest the usage of a setSikuliXLogCallback
I searched the net for setSikuliXLogCallback, but the only hit I got
was that thread. Hence this question/plea for more detail.
I recently started looking into Sikuli using IDE first, then I moved onto using standalone Jython, and then finally had the courage to venture into using Ruby, which is the primary language of my test framework.
I was pleasantly surprised how easy and great the interface was. Kudos to RaiMan and contributors on this great tool.
Now, onto my question...
I can redirect the java output to a single log file via Debug.setLogFile(log_file).
My test framework, however, uses Log4R which direct the log output to multiple files as well as the console.
Ideally I would like to redirect the logging requests to my logger to do it's thing, so that I can get all the output like:
[LOG] CLICK on L(27,10)@S(0)[0,0 1440x900]
in the standard log files.
I kind-a implemented a workaround that does this as follows:
1. I put in a one-line callback patch in the native_exception_protect() method in the sikulix.rb file, like this:
m.bind(self).call(*args) # previous existing line
SikuliX4Ruby.post_region_callback(m) if SikuliX4Ruby.respond_to?(:post_region_callback) # line added
2. Redirected the java logs to a temp file first, by defining and calling the following:
module SikuliLib
def self.log_file=(log_file)
@@log_file = log_file
Debug.setLogFile(log_file)
end
3. Captured the original logoutput and logged it via myLogger as such:
module SikuliX4Ruby
def self.post_region_callback(method = nil, obj =nil)
file = SikuliLib.log_file
File.readlines(file).each { |line| myLogger.info(line.chomp) } if File.size?(file)
FileUtils.rm file
end
end
My workaround does the trick for now, but I'm not happy about the fact that I had to copy and patch the sikulix.rb file.
I would rather not muck with original SikuliX distribution files and use a callback that is officially supported, if there is one (The previous question thread hinted that there might be one already.)
To manage notifications about this bug go to:
https://bugs.launchpad.net/sikuli/+bug/1350735/+subscriptions
References