This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch cc in repository https://gitbox.apache.org/repos/asf/camel.git
commit a323552bb687bdddf804b1740357487d1ae417e5 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Nov 29 09:31:13 2023 +0100 CAMEL-20164: camel-timer: Expose more stats of its running state. --- .../org/apache/camel/catalog/components/timer.json | 3 +- .../component/timer/TimerEndpointConfigurer.java | 6 + .../component/timer/TimerEndpointUriFactory.java | 3 +- .../org/apache/camel/component/timer/timer.json | 3 +- .../camel/component/timer/TimerConsumer.java | 121 +++++++++++++++++---- .../camel/component/timer/TimerEndpoint.java | 14 +++ .../camel/api/management/ManagedCamelContext.java | 4 +- .../camel/management/ManagedCamelContextImpl.java | 4 +- .../dsl/JettyHttp11EndpointBuilderFactory.java | 115 ++++++++++++++++++++ .../endpoint/dsl/TimerEndpointBuilderFactory.java | 35 ++++++ 10 files changed, 277 insertions(+), 31 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/timer.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/timer.json index 17a8126b749..f0b0c46d430 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/timer.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/timer.json @@ -44,6 +44,7 @@ "pattern": { "index": 10, "kind": "parameter", "displayName": "Pattern", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to specify a custom Date pattern to use for setting the time option using URI syntax." }, "synchronous": { "index": 11, "kind": "parameter", "displayName": "Synchronous", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used" }, "time": { "index": 12, "kind": "parameter", "displayName": "Time", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.util.Date", "deprecated": false, "autowired": false, "secret": false, "description": "A java.util.Date the first event should be generated. If using the URI, the pattern expected is: yyyy-MM-dd HH:mm:ss or yyyy-MM-dd'T'HH:mm:ss." }, - "timer": { "index": 13, "kind": "parameter", "displayName": "Timer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Timer", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Timer" } + "timer": { "index": 13, "kind": "parameter", "displayName": "Timer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Timer", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Timer" }, + "runLoggingLevel": { "index": 14, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the l [...] } } diff --git a/components/camel-timer/src/generated/java/org/apache/camel/component/timer/TimerEndpointConfigurer.java b/components/camel-timer/src/generated/java/org/apache/camel/component/timer/TimerEndpointConfigurer.java index fcae1f7e3b8..80f46a49a49 100644 --- a/components/camel-timer/src/generated/java/org/apache/camel/component/timer/TimerEndpointConfigurer.java +++ b/components/camel-timer/src/generated/java/org/apache/camel/component/timer/TimerEndpointConfigurer.java @@ -37,6 +37,8 @@ public class TimerEndpointConfigurer extends PropertyConfigurerSupport implement case "period": target.setPeriod(property(camelContext, java.time.Duration.class, value).toMillis()); return true; case "repeatcount": case "repeatCount": target.setRepeatCount(property(camelContext, long.class, value)); return true; + case "runlogginglevel": + case "runLoggingLevel": target.setRunLoggingLevel(property(camelContext, org.apache.camel.LoggingLevel.class, value)); return true; case "synchronous": target.setSynchronous(property(camelContext, boolean.class, value)); return true; case "time": target.setTime(property(camelContext, java.util.Date.class, value)); return true; case "timer": target.setTimer(property(camelContext, java.util.Timer.class, value)); return true; @@ -63,6 +65,8 @@ public class TimerEndpointConfigurer extends PropertyConfigurerSupport implement case "period": return long.class; case "repeatcount": case "repeatCount": return long.class; + case "runlogginglevel": + case "runLoggingLevel": return org.apache.camel.LoggingLevel.class; case "synchronous": return boolean.class; case "time": return java.util.Date.class; case "timer": return java.util.Timer.class; @@ -90,6 +94,8 @@ public class TimerEndpointConfigurer extends PropertyConfigurerSupport implement case "period": return target.getPeriod(); case "repeatcount": case "repeatCount": return target.getRepeatCount(); + case "runlogginglevel": + case "runLoggingLevel": return target.getRunLoggingLevel(); case "synchronous": return target.isSynchronous(); case "time": return target.getTime(); case "timer": return target.getTimer(); diff --git a/components/camel-timer/src/generated/java/org/apache/camel/component/timer/TimerEndpointUriFactory.java b/components/camel-timer/src/generated/java/org/apache/camel/component/timer/TimerEndpointUriFactory.java index fcf247658c8..5e5edd2402f 100644 --- a/components/camel-timer/src/generated/java/org/apache/camel/component/timer/TimerEndpointUriFactory.java +++ b/components/camel-timer/src/generated/java/org/apache/camel/component/timer/TimerEndpointUriFactory.java @@ -21,7 +21,7 @@ public class TimerEndpointUriFactory extends org.apache.camel.support.component. private static final Set<String> SECRET_PROPERTY_NAMES; private static final Set<String> MULTI_VALUE_PREFIXES; static { - Set<String> props = new HashSet<>(14); + Set<String> props = new HashSet<>(15); props.add("bridgeErrorHandler"); props.add("daemon"); props.add("delay"); @@ -32,6 +32,7 @@ public class TimerEndpointUriFactory extends org.apache.camel.support.component. props.add("pattern"); props.add("period"); props.add("repeatCount"); + props.add("runLoggingLevel"); props.add("synchronous"); props.add("time"); props.add("timer"); diff --git a/components/camel-timer/src/generated/resources/org/apache/camel/component/timer/timer.json b/components/camel-timer/src/generated/resources/org/apache/camel/component/timer/timer.json index 17a8126b749..f0b0c46d430 100644 --- a/components/camel-timer/src/generated/resources/org/apache/camel/component/timer/timer.json +++ b/components/camel-timer/src/generated/resources/org/apache/camel/component/timer/timer.json @@ -44,6 +44,7 @@ "pattern": { "index": 10, "kind": "parameter", "displayName": "Pattern", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Allows you to specify a custom Date pattern to use for setting the time option using URI syntax." }, "synchronous": { "index": 11, "kind": "parameter", "displayName": "Synchronous", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used" }, "time": { "index": 12, "kind": "parameter", "displayName": "Time", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.util.Date", "deprecated": false, "autowired": false, "secret": false, "description": "A java.util.Date the first event should be generated. If using the URI, the pattern expected is: yyyy-MM-dd HH:mm:ss or yyyy-MM-dd'T'HH:mm:ss." }, - "timer": { "index": 13, "kind": "parameter", "displayName": "Timer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Timer", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Timer" } + "timer": { "index": 13, "kind": "parameter", "displayName": "Timer", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.Timer", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom Timer" }, + "runLoggingLevel": { "index": 14, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the l [...] } } diff --git a/components/camel-timer/src/main/java/org/apache/camel/component/timer/TimerConsumer.java b/components/camel-timer/src/main/java/org/apache/camel/component/timer/TimerConsumer.java index d1545eb1bad..355af0be804 100644 --- a/components/camel-timer/src/main/java/org/apache/camel/component/timer/TimerConsumer.java +++ b/components/camel-timer/src/main/java/org/apache/camel/component/timer/TimerConsumer.java @@ -25,6 +25,7 @@ import java.util.concurrent.atomic.AtomicLong; import org.apache.camel.AsyncCallback; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; +import org.apache.camel.LoggingLevel; import org.apache.camel.Processor; import org.apache.camel.StartupListener; import org.apache.camel.Suspendable; @@ -42,6 +43,8 @@ public class TimerConsumer extends DefaultConsumer implements StartupListener, S private volatile TimerTask task; private volatile boolean configured; private ExecutorService executorService; + private final AtomicLong counter = new AtomicLong(); + private volatile boolean polling; public TimerConsumer(TimerEndpoint endpoint, Processor processor) { super(endpoint, processor); @@ -53,13 +56,48 @@ public class TimerConsumer extends DefaultConsumer implements StartupListener, S return (TimerEndpoint) super.getEndpoint(); } + /** + * Total number of polls run + */ + public long getCounter() { + return counter.get(); + } + + /** + * Whether polling is currently in progress + */ + public boolean isPolling() { + return polling; + } + + public String getTimerName() { + return getEndpoint().getTimerName(); + } + + public boolean isFixedRate() { + return getEndpoint().isFixedRate(); + } + + public long getDelay() { + return getEndpoint().getDelay(); + } + + public long getPeriod() { + return getEndpoint().getPeriod(); + } + + public long getRepeatCount() { + return getEndpoint().getRepeatCount(); + } + + public LoggingLevel getRunLoggingLevel() { + return getEndpoint().getRunLoggingLevel(); + } + @Override public void doInit() throws Exception { if (endpoint.getDelay() >= 0) { task = new TimerTask() { - // counter - private final AtomicLong counter = new AtomicLong(); - @Override public void run() { if (!isTaskRunAllowed()) { @@ -68,25 +106,57 @@ public class TimerConsumer extends DefaultConsumer implements StartupListener, S return; } + // log starting + LoggingLevel runLoggingLevel = getEndpoint().getRunLoggingLevel(); + if (LoggingLevel.ERROR == runLoggingLevel) { + LOG.error("Timer task started on: {}", getEndpoint()); + } else if (LoggingLevel.WARN == runLoggingLevel) { + LOG.warn("Timer task started on: {}", getEndpoint()); + } else if (LoggingLevel.INFO == runLoggingLevel) { + LOG.info("Timer task started on: {}", getEndpoint()); + } else if (LoggingLevel.DEBUG == runLoggingLevel) { + LOG.debug("Timer task started on: {}", getEndpoint()); + } else { + LOG.trace("Timer task started on: {}", getEndpoint()); + } + try { - long count = counter.incrementAndGet(); - - boolean fire = endpoint.getRepeatCount() <= 0 || count <= endpoint.getRepeatCount(); - if (fire) { - sendTimerExchange(count); - } else { - // no need to fire anymore as we exceeded repeat - // count - LOG.debug("Cancelling {} timer as repeat count limit reached after {} counts.", - endpoint.getTimerName(), endpoint.getRepeatCount()); - cancel(); - } + polling = true; + doRun(); } catch (Exception e) { - // catch all to avoid the JVM closing the thread and not - // firing again LOG.warn( "Error processing exchange. This exception will be ignored, to let the timer be able to trigger again.", e); + } finally { + polling = false; + } + + // log completed + if (LoggingLevel.ERROR == runLoggingLevel) { + LOG.error("Timer task completed on: {}", getEndpoint()); + } else if (LoggingLevel.WARN == runLoggingLevel) { + LOG.warn("Timer task completed on: {}", getEndpoint()); + } else if (LoggingLevel.INFO == runLoggingLevel) { + LOG.info("Timer task completed on: {}", getEndpoint()); + } else if (LoggingLevel.DEBUG == runLoggingLevel) { + LOG.debug("Timer task completed on: {}", getEndpoint()); + } else { + LOG.trace("Timer task completed on: {}", getEndpoint()); + } + } + + protected void doRun() { + long count = counter.incrementAndGet(); + + boolean fire = endpoint.getRepeatCount() <= 0 || count <= endpoint.getRepeatCount(); + if (fire) { + sendTimerExchange(count); + } else { + // no need to fire anymore as we exceeded repeat + // count + LOG.debug("Cancelling {} timer as repeat count limit reached after {} counts.", + endpoint.getTimerName(), endpoint.getRepeatCount()); + cancel(); } } }; @@ -99,8 +169,7 @@ public class TimerConsumer extends DefaultConsumer implements StartupListener, S if (endpoint.getDelay() >= 0) { // only configure task if CamelContext already started, otherwise - // the StartupListener - // is configuring the task later + // the StartupListener is configuring the task later if (task != null && !configured && endpoint.getCamelContext().getStatus().isStarted()) { Timer timer = endpoint.getTimer(this); configureTask(task, timer); @@ -111,11 +180,15 @@ public class TimerConsumer extends DefaultConsumer implements StartupListener, S endpoint.getEndpointUri()); executorService.execute(() -> { - final AtomicLong counter = new AtomicLong(); - long count = counter.incrementAndGet(); - while ((endpoint.getRepeatCount() <= 0 || count <= endpoint.getRepeatCount()) && isRunAllowed()) { - sendTimerExchange(count); - count = counter.incrementAndGet(); + polling = true; + try { + long count = counter.incrementAndGet(); + while ((endpoint.getRepeatCount() <= 0 || count <= endpoint.getRepeatCount()) && isRunAllowed()) { + sendTimerExchange(count); + count = counter.incrementAndGet(); + } + } finally { + polling = false; } }); } diff --git a/components/camel-timer/src/main/java/org/apache/camel/component/timer/TimerEndpoint.java b/components/camel-timer/src/main/java/org/apache/camel/component/timer/TimerEndpoint.java index 97dfaacbd4a..4361f351ea2 100644 --- a/components/camel-timer/src/main/java/org/apache/camel/component/timer/TimerEndpoint.java +++ b/components/camel-timer/src/main/java/org/apache/camel/component/timer/TimerEndpoint.java @@ -22,6 +22,7 @@ import java.util.Timer; import org.apache.camel.Category; import org.apache.camel.Component; import org.apache.camel.Consumer; +import org.apache.camel.LoggingLevel; import org.apache.camel.MultipleConsumersSupport; import org.apache.camel.Processor; import org.apache.camel.Producer; @@ -53,6 +54,9 @@ public class TimerEndpoint extends DefaultEndpoint implements MultipleConsumersS private long delay = 1000; @UriParam private long repeatCount; + @UriParam(defaultValue = "TRACE", label = "consumer,scheduler", + description = "The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.") + private LoggingLevel runLoggingLevel = LoggingLevel.TRACE; @UriParam private boolean fixedRate; @UriParam(defaultValue = "true", label = "advanced") @@ -176,6 +180,16 @@ public class TimerEndpoint extends DefaultEndpoint implements MultipleConsumersS this.fixedRate = fixedRate; } + @ManagedAttribute(description = "The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.") + public LoggingLevel getRunLoggingLevel() { + return runLoggingLevel; + } + + @ManagedAttribute(description = "The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.") + public void setRunLoggingLevel(LoggingLevel runLoggingLevel) { + this.runLoggingLevel = runLoggingLevel; + } + @ManagedAttribute(description = "Timer Period") public long getPeriod() { return period; diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java index 03316912eba..d8a11acd886 100644 --- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java +++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java @@ -93,8 +93,8 @@ public interface ManagedCamelContext { * Gets the managed consumer client api from any of the routes which with the given route id * * @param id route id having the consumer - * @param type the managed consumer type from the - * {@link org.apache.camel.api.management.mbean} package. + * @param type the managed consumer type from the {@link org.apache.camel.api.management.mbean} + * package. * @return the consumer or <tt>null</tt> if not found * @throws IllegalArgumentException if the type is not compliant */ diff --git a/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java b/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java index cbc2af9287e..59ec9fac7d4 100644 --- a/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java +++ b/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java @@ -131,14 +131,14 @@ public class ManagedCamelContextImpl implements ManagedCamelContext { if (route != null) { try { Consumer consumer = route.getConsumer(); - ObjectName on = getManagementStrategy().getManagementObjectNameStrategy().getObjectNameForConsumer(camelContext, consumer); + ObjectName on = getManagementStrategy().getManagementObjectNameStrategy().getObjectNameForConsumer(camelContext, + consumer); return getManagementStrategy().getManagementAgent().newProxyClient(on, type); } catch (MalformedObjectNameException e) { throw RuntimeCamelException.wrapRuntimeCamelException(e); } } - return null; } diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JettyHttp11EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JettyHttp11EndpointBuilderFactory.java index 30cedbea383..22c9b97f548 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JettyHttp11EndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JettyHttp11EndpointBuilderFactory.java @@ -934,6 +934,58 @@ public interface JettyHttp11EndpointBuilderFactory { doSetProperty("exchangePattern", exchangePattern); return this; } + /** + * The size threshold after which files will be written to disk for + * multipart/form-data requests. By default the files are not written to + * disk. + * + * The option is a: <code>java.lang.Integer</code> type. + * + * Group: consumer (advanced) + * + * @param fileSizeThreshold the value to set + * @return the dsl builder + */ + default AdvancedJettyHttp11EndpointBuilder fileSizeThreshold( + Integer fileSizeThreshold) { + doSetProperty("fileSizeThreshold", fileSizeThreshold); + return this; + } + /** + * The size threshold after which files will be written to disk for + * multipart/form-data requests. By default the files are not written to + * disk. + * + * The option will be converted to a + * <code>java.lang.Integer</code> type. + * + * Group: consumer (advanced) + * + * @param fileSizeThreshold the value to set + * @return the dsl builder + */ + default AdvancedJettyHttp11EndpointBuilder fileSizeThreshold( + String fileSizeThreshold) { + doSetProperty("fileSizeThreshold", fileSizeThreshold); + return this; + } + /** + * The directory location where files will be store for + * multipart/form-data requests. By default the files are written in the + * system temporary folder. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: consumer (advanced) + * + * @param filesLocation the value to set + * @return the dsl builder + */ + default AdvancedJettyHttp11EndpointBuilder filesLocation( + String filesLocation) { + doSetProperty("filesLocation", filesLocation); + return this; + } /** * Configuration of the filter init parameters. These parameters will be * applied to the filter list before starting the jetty server. @@ -1198,6 +1250,69 @@ public interface JettyHttp11EndpointBuilderFactory { doSetProperty("mapHttpMessageHeaders", mapHttpMessageHeaders); return this; } + /** + * The maximum size allowed for uploaded files. -1 means no limit. + * + * The option is a: <code>java.lang.Long</code> type. + * + * Group: consumer (advanced) + * + * @param maxFileSize the value to set + * @return the dsl builder + */ + default AdvancedJettyHttp11EndpointBuilder maxFileSize(Long maxFileSize) { + doSetProperty("maxFileSize", maxFileSize); + return this; + } + /** + * The maximum size allowed for uploaded files. -1 means no limit. + * + * The option will be converted to a + * <code>java.lang.Long</code> type. + * + * Group: consumer (advanced) + * + * @param maxFileSize the value to set + * @return the dsl builder + */ + default AdvancedJettyHttp11EndpointBuilder maxFileSize( + String maxFileSize) { + doSetProperty("maxFileSize", maxFileSize); + return this; + } + /** + * The maximum size allowed for multipart/form-data requests. -1 means + * no limit. + * + * The option is a: <code>java.lang.Long</code> type. + * + * Group: consumer (advanced) + * + * @param maxRequestSize the value to set + * @return the dsl builder + */ + default AdvancedJettyHttp11EndpointBuilder maxRequestSize( + Long maxRequestSize) { + doSetProperty("maxRequestSize", maxRequestSize); + return this; + } + /** + * The maximum size allowed for multipart/form-data requests. -1 means + * no limit. + * + * The option will be converted to a + * <code>java.lang.Long</code> type. + * + * Group: consumer (advanced) + * + * @param maxRequestSize the value to set + * @return the dsl builder + */ + default AdvancedJettyHttp11EndpointBuilder maxRequestSize( + String maxRequestSize) { + doSetProperty("maxRequestSize", maxRequestSize); + return this; + } /** * Allows using a custom multipart filter. Note: setting * multipartFilterRef forces the value of enableMultipartFilter to true. diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/TimerEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/TimerEndpointBuilderFactory.java index d521d42800c..782c82c4ce3 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/TimerEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/TimerEndpointBuilderFactory.java @@ -199,6 +199,41 @@ public interface TimerEndpointBuilderFactory { doSetProperty("repeatCount", repeatCount); return this; } + /** + * The consumer logs a start/complete log line when it polls. This + * option allows you to configure the logging level for that. + * + * The option is a: + * <code>org.apache.camel.LoggingLevel</code> type. + * + * Default: TRACE + * Group: scheduler + * + * @param runLoggingLevel the value to set + * @return the dsl builder + */ + default TimerEndpointBuilder runLoggingLevel( + org.apache.camel.LoggingLevel runLoggingLevel) { + doSetProperty("runLoggingLevel", runLoggingLevel); + return this; + } + /** + * The consumer logs a start/complete log line when it polls. This + * option allows you to configure the logging level for that. + * + * The option will be converted to a + * <code>org.apache.camel.LoggingLevel</code> type. + * + * Default: TRACE + * Group: scheduler + * + * @param runLoggingLevel the value to set + * @return the dsl builder + */ + default TimerEndpointBuilder runLoggingLevel(String runLoggingLevel) { + doSetProperty("runLoggingLevel", runLoggingLevel); + return this; + } } /**