| /* |
| * 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. |
| */ |
| package org.apache.geode.internal.logging.log4j; |
| |
| import static java.util.concurrent.TimeUnit.MINUTES; |
| import static java.util.concurrent.TimeUnit.SECONDS; |
| import static org.apache.geode.cache.RegionShortcut.LOCAL; |
| import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS; |
| import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE; |
| import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL; |
| import static org.apache.logging.log4j.Level.INFO; |
| import static org.assertj.core.api.Assertions.assertThat; |
| |
| import java.io.File; |
| import java.util.Properties; |
| |
| import org.apache.logging.log4j.LogManager; |
| import org.openjdk.jmh.annotations.Benchmark; |
| import org.openjdk.jmh.annotations.BenchmarkMode; |
| import org.openjdk.jmh.annotations.Fork; |
| import org.openjdk.jmh.annotations.Level; |
| import org.openjdk.jmh.annotations.Measurement; |
| import org.openjdk.jmh.annotations.Mode; |
| import org.openjdk.jmh.annotations.OutputTimeUnit; |
| import org.openjdk.jmh.annotations.Scope; |
| import org.openjdk.jmh.annotations.Setup; |
| import org.openjdk.jmh.annotations.State; |
| import org.openjdk.jmh.annotations.TearDown; |
| import org.openjdk.jmh.annotations.Warmup; |
| |
| import org.apache.geode.cache.CacheFactory; |
| import org.apache.geode.cache.Region; |
| import org.apache.geode.internal.cache.InternalCache; |
| import org.apache.geode.test.assertj.LogFileAssert; |
| import org.apache.geode.test.junit.rules.accessible.AccessibleTemporaryFolder; |
| |
| @Measurement(iterations = 1, time = 1, timeUnit = MINUTES) |
| @Warmup(iterations = 1, time = 1, timeUnit = MINUTES) |
| @Fork(1) |
| @BenchmarkMode(Mode.Throughput) |
| @OutputTimeUnit(SECONDS) |
| @State(Scope.Benchmark) |
| @SuppressWarnings("unused") |
| public class CacheLoggingBenchmark { |
| |
| private FastLogger fastLogger; |
| private String message; |
| |
| private AccessibleTemporaryFolder temporaryFolder; |
| private InternalCache cache; |
| private Region<String, String> region; |
| private String key; |
| private String value; |
| |
| @Setup(Level.Trial) |
| public void setUp() throws Throwable { |
| temporaryFolder = new AccessibleTemporaryFolder(); |
| temporaryFolder.before(); |
| |
| String name = getClass().getSimpleName(); |
| File logFile = new File(temporaryFolder.getRoot(), name + ".log"); |
| |
| Properties config = new Properties(); |
| config.setProperty(LOCATORS, ""); |
| config.setProperty(LOG_LEVEL, "INFO"); |
| config.setProperty(LOG_FILE, logFile.getAbsolutePath()); |
| |
| assertThat(logFile).doesNotExist(); |
| cache = (InternalCache) new CacheFactory(config).create(); |
| assertThat(logFile).exists(); |
| |
| region = cache.<String, String>createRegionFactory(LOCAL).create(name + "-region"); |
| |
| fastLogger = new FastLogger(LogManager.getLogger()); |
| assertThat(fastLogger.getLevel()).isEqualTo(INFO); |
| assertThat(fastLogger.isDelegating()).isFalse(); |
| |
| message = "message"; |
| key = "key"; |
| value = "value"; |
| |
| LogFileAssert.assertThat(logFile).doesNotContain(message); |
| fastLogger.info(message); |
| LogFileAssert.assertThat(logFile).contains(message); |
| } |
| |
| @TearDown(Level.Trial) |
| public void tearDown() { |
| cache.close(); |
| temporaryFolder.after(); |
| } |
| |
| @Benchmark |
| public void infoLogStatement() { |
| fastLogger.info(message); |
| } |
| |
| @Benchmark |
| public void putStatement() { |
| region.put(key, value); |
| } |
| } |