#Licensed to the Apache Software Foundation (ASF) under one
#or more contributor license agreements.  See the NOTICE file
#distributed with this work for additional information
#regarding copyright ownership.  The ASF licenses this file
#to you under the Apache License, Version 2.0 (the
#"License"); you may not use this file except in compliance
#with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#Unless required by applicable law or agreed to in writing,
#software distributed under the License is distributed on an
#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#KIND, either express or implied.  See the License for the
#specific language governing permissions and limitations
#under the License.

#
# to use add to the launcher
#  -javaagent:/.../sirona-javaagent-0.5-incubating-SNAPSHOT-shaded.jar=dumpOnExit=/tmp/sirona.csv
#

org.apache.sirona.javaagent.listener.CounterListener.excludes = \
  container:jvm,\
  prefix:org.apache.logging.log4j,\
  prefix:org.apache.catalina.core.ContainerBase,\
  prefix:org.apache.tomcat.util.descriptor.web.WebXml,\
  prefix:org.apache.cxf.common.util.Spring,\
  prefix:org.apache.sirona

org.apache.sirona.javaagent.path.tracking.activate=false
