HTTP Binding - can the logging be tamed?

I’m using the HTTP binding to issue a ping to check if a device is around or not. It works well to my iphone however when pinging my WeMo Insight I get the error below when its not around
[ERROR] [g.openhab.io.net.http.HttpUtil] - Fatal transport error: java.net.NoRouteToHostException: No route to host
Is there an easy way of either turning off ERROR level logging for this binding or persuading it to report this error as DEBUG level?

The issue is that the log message is coming from library code org.openhab.io.net.http.HttpUtil that is used throughout openHAB, so the HTTP binding itself has no control at that point.

A very heavy-handed approach would be to turn off all messages from this class in logback.xml, but that could leave you blind to real problems that need attention. So if you do this, consider yourself warned!

<logger name="org.openhab.io.net.http.HttpUtil" level="OFF"/>

I have a similar issue with my solar inverters, which shut down at night.
In the old google groups I got a tip to do the http calls in a rule so you can catch the specific exceptions. And not cause logging.

I haven’t tried it yet, but seems like a reasonable solution.

Thanks for the reply, I’ll likely turn off the logging in the normal log only so I can see what’s going on in debug if something stops working. I only use it to issue pings to turn the heating on in the morning when I pick my phone up. The latest Ping is to detect a Wemo had been power cycled so it can reset a rule which starts battery chargers from spare solar, so again not critical if it stops working as I’ll make it fail in an off condition.

Replying to myself here, I tried using the http action from a rule, but I still can’t catch the exceptions, they still end up in the logs, and its even worse:

 [ERROR] [.smarthome.model.script.actions.HTTP] - Fatal transport error: {}
java.io.IOException: java.util.concurrent.ExecutionException: java.net.NoRouteToHostException: No route to host
        at org.eclipse.smarthome.io.net.http.HttpUtil.executeUrl(HttpUtil.java:236)[113:org.eclipse.smarthome.io.net:0.9.0.201612010841]
        at org.eclipse.smarthome.io.net.http.HttpUtil.executeUrl(HttpUtil.java:130)[113:org.eclipse.smarthome.io.net:0.9.0.201612010841]
        at org.eclipse.smarthome.io.net.http.HttpUtil.executeUrl(HttpUtil.java:86)[113:org.eclipse.smarthome.io.net:0.9.0.201612010841]
        at org.eclipse.smarthome.io.net.http.HttpUtil.executeUrl(HttpUtil.java:65)[113:org.eclipse.smarthome.io.net:0.9.0.201612010841]
        at org.eclipse.smarthome.model.script.actions.HTTP.sendHttpGetRequest(HTTP.java:52)
        at org.eclipse.smarthome.model.script.actions.HTTP.sendHttpGetRequest(HTTP.java:39)
        at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_111]
        at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_111]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1085)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1060)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1046)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:991)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:114)[129:org.eclipse.smarthome.model.script:0.9.0.201612010841]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:901)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:864)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:223)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:826)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:263)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:446)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:613)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:259)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:446)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:189)[145:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
        at org.eclipse.smarthome.model.script.runtime.internal.engine.ScriptImpl.execute(ScriptImpl.java:77)[130:org.eclipse.smarthome.model.script.runtime:0.9.0.201612010841]
        at org.eclipse.smarthome.model.rule.runtime.internal.engine.ExecuteRuleJob.execute(ExecuteRuleJob.java:60)[128:org.eclipse.smarthome.model.rule.runtime:0.9.0.201612010841]
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)[104:org.eclipse.smarthome.core.scheduler:0.9.0.201612010841]
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)[104:org.eclipse.smarthome.core.scheduler:0.9.0.201612010841]
Caused by: java.util.concurrent.ExecutionException: java.net.NoRouteToHostException: No route to host
        at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118)
        at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:110)
        at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:655)
        at org.eclipse.smarthome.io.net.http.HttpUtil.executeUrl(HttpUtil.java:219)[113:org.eclipse.smarthome.io.net:0.9.0.201612010841]
        ... 34 more
Caused by: java.net.NoRouteToHostException: No route to host
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)[:1.8.0_111]
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)[:1.8.0_111]
        at org.eclipse.jetty.io.SelectorManager.finishConnect(SelectorManager.java:340)[72:org.eclipse.jetty.io:9.2.14.v20151106]
        at org.eclipse.jetty.io.SelectorManager$ManagedSelector.processConnect(SelectorManager.java:675)[72:org.eclipse.jetty.io:9.2.14.v20151106]
        at org.eclipse.jetty.io.SelectorManager$ManagedSelector.processKey(SelectorManager.java:644)[72:org.eclipse.jetty.io:9.2.14.v20151106]
        at org.eclipse.jetty.io.SelectorManager$ManagedSelector.select(SelectorManager.java:611)[72:org.eclipse.jetty.io:9.2.14.v20151106]
        at org.eclipse.jetty.io.SelectorManager$ManagedSelector.run(SelectorManager.java:549)[72:org.eclipse.jetty.io:9.2.14.v20151106]
        at org.eclipse.jetty.util.thread.NonBlockingThread.run(NonBlockingThread.java:52)[83:org.eclipse.jetty.util:9.2.14.v20151106]
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[83:org.eclipse.jetty.util:9.2.14.v20151106]
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[83:org.eclipse.jetty.util:9.2.14.v20151106]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_111]

Any clues on how to avoid this, without turning off logging? I can understand that you don’t want to catch exceptions in the normal binding (IE binding to an item). But I feel that I should be able to catch all exceptions in a rule, that are caused by calling an action.

I use the following to query a website every minute which seems to work.

when Time cron "50 * * * * ?" then
try {
var AllHeatpumpsStatus = executeCommandLine('curl -sSH "Accept: application/json" "https://TheWebQueryAddress"', 5000)
do stuff with the results
} catch(Throwable t) {	logError("Heatpumps", "Weird shit happened: {}", t)	}
end

The error in the logfiles is changed from 50 lines of largely meaningless rubbish into

Weird shit happened: java.lang.IllegalArgumentException: Invalid container object

Changing the last but one line into the text below should give you log silence if you can persuade your script to work with executeCommandline

} catch(Throwable t) {}

That looks like a coding bug. I will see if I can open a PR. …the PR

Can you turn logging off for everything in OH2?

I don’t need it except when adding new features.

Ignore, I should have searched the forum first.

That helped a lot, thanks. But even when catching it, you’ll still will get the line in the log.
I’m going to add something to the rule like a ping or something to check if the inverter is online, before I do the http call.