| |
| /* |
| * 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. |
| */ |
| |
| /* |
| * Source: https://github.com/Dwolla/scala-test-utils |
| * The MIT License (MIT) |
| * Copyright © 2016 Dwolla |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
| * and associated documentation files (the "Software"), to deal in the Software without restriction, |
| * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, |
| * subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
| * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF |
| * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| */ |
| |
| package org.apache.iota.fey |
| |
| import ch.qos.logback.classic.Level |
| import ch.qos.logback.classic.spi.ILoggingEvent |
| import ch.qos.logback.core.AppenderBase |
| |
| import scala.collection.mutable |
| import scala.collection.mutable.ListBuffer |
| |
| class InMemoryAppender extends AppenderBase[ILoggingEvent] { |
| private val events: mutable.Map[Thread, ListBuffer[ILoggingEvent]] = new mutable.HashMap[Thread, ListBuffer[ILoggingEvent]] |
| |
| override def append(e: ILoggingEvent): Unit = |
| events.getOrElseUpdate(Thread.currentThread(), new ListBuffer[ILoggingEvent]).append(e) |
| |
| def reset(): Unit = events.get(Thread.currentThread()).foreach(l => l.clear()) |
| |
| def containsAtLevel(msg: String, logLevel: Level): Boolean = |
| eventsForCurrentThread.filter(e => e.getLevel == logLevel) |
| .map(e => e.getFormattedMessage).contains(msg) |
| |
| def contains(msg: String): Boolean = |
| eventsForCurrentThread.map(e => e.getFormattedMessage).contains(msg) |
| |
| def dumpLogs(): Unit = |
| eventsForCurrentThread.foreach(e => println(s"${Thread.currentThread().getName}: ${e.getFormattedMessage}")) |
| |
| private def eventsForCurrentThread = events.getOrElse(Thread.currentThread(), new ListBuffer[ILoggingEvent]) |
| } |