blob: 6733210d734215ead0cc43ec440ccac18bb05cd7 [file] [log] [blame]
/*
* 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])
}