Tweak module logging (#698)

* Split app loggers into their corresponding modules

This avoids a bunch of places with awkward implicit resolution.

We also make sure that all logging in node, chain and wallet
happens with the app loggers, and not BitcoinSLogger

* Tune test logging level to WARN
This commit is contained in:
Torkel Rogstad 2019-08-20 15:11:10 +02:00 committed by Chris Stewart
parent ff051ac7a2
commit 2a0d78d054
31 changed files with 195 additions and 126 deletions

View File

@ -0,0 +1,25 @@
package org.bitcoins.server
import org.slf4j.Logger
import org.bitcoins.db.AppConfig
import org.bitcoins.db.AppLoggers
/** Exposes access to the HTTP RPC server logger */
private[bitcoins] trait HttpLogger {
private var _logger: Logger = _
protected[bitcoins] def logger(implicit config: AppConfig) = {
if (_logger == null) {
_logger = HttpLogger.getLogger
}
_logger
}
}
private[bitcoins] object HttpLogger extends AppLoggers {
/**
* @return the HTTP RPC server submobule logger
*/
def getLogger(implicit conf: AppConfig): Logger =
getLoggerImpl(LoggerKind.Http)
}

View File

@ -24,7 +24,7 @@ object Main extends App {
BitcoinSAppConfig.fromDefaultDatadir()
}
private val logger = AppLoggers.getHttpLogger(
private val logger = HttpLogger.getLogger(
conf.walletConf // doesn't matter which one we pass in
)

View File

@ -11,7 +11,6 @@ import akka.http.scaladsl.server.Directives._
import de.heikoseeberger.akkahttpupickle.UpickleSupport._
import akka.http.scaladsl.server.directives.DebuggingDirectives
import akka.event.Logging
import org.bitcoins.db.HttpLogger
import org.bitcoins.db.AppConfig
case class Server(conf: AppConfig, handlers: Seq[ServerRoute])(

View File

@ -0,0 +1,25 @@
package org.bitcoins.chain
import org.bitcoins.db.AppLoggers
import org.bitcoins.chain.config.ChainAppConfig
import org.slf4j.Logger
/** Exposes access to the chain verification logger */
private[bitcoins] trait ChainVerificationLogger {
private var _logger: Logger = _
protected[bitcoins] def logger(implicit config: ChainAppConfig) = {
if (_logger == null) {
_logger = ChainVerificationLogger.getLogger
}
_logger
}
}
private[bitcoins] object ChainVerificationLogger extends AppLoggers {
/**
* @return the chain verification submobule logger
*/
def getLogger(implicit conf: ChainAppConfig): Logger =
getLoggerImpl(LoggerKind.ChainVerification)
}

View File

@ -4,7 +4,7 @@ import org.bitcoins.chain.config.ChainAppConfig
import org.bitcoins.chain.models.BlockHeaderDb
import org.bitcoins.chain.validation.{TipUpdateResult, TipValidation}
import org.bitcoins.core.protocol.blockchain.BlockHeader
import org.bitcoins.db.ChainVerificationLogger
import org.bitcoins.chain.ChainVerificationLogger
import scala.collection.{IndexedSeqLike, mutable}

View File

@ -12,7 +12,7 @@ import org.bitcoins.chain.validation.TipUpdateResult.{
import org.bitcoins.core.crypto.DoubleSha256DigestBE
import org.bitcoins.core.protocol.blockchain.BlockHeader
import org.bitcoins.core.util.FutureUtil
import org.bitcoins.db.ChainVerificationLogger
import org.bitcoins.chain.ChainVerificationLogger
import scala.concurrent.{ExecutionContext, Future}

View File

@ -8,7 +8,7 @@ import org.bitcoins.core.protocol.blockchain.BlockHeader
import scala.concurrent.{ExecutionContext, Future}
import org.bitcoins.chain.config.ChainAppConfig
import org.bitcoins.db.ChainVerificationLogger
import org.bitcoins.chain.ChainVerificationLogger
trait ChainSync extends ChainVerificationLogger {

View File

@ -8,7 +8,7 @@ import org.bitcoins.core.protocol.blockchain.BlockHeader
import org.bitcoins.core.util.NumberUtil
import org.bitcoins.chain.config.ChainAppConfig
import org.bitcoins.db.ChainVerificationLogger
import org.bitcoins.chain.ChainVerificationLogger
/**
* Responsible for checking if we can connect two

View File

@ -13,7 +13,7 @@ bitcoin-s {
# The available loggers are:
# incoming and outgoing P2P messages
#p2p = info
# p2p = info
# verification of block headers, merkle trees
# chain-verification = info

View File

@ -1,7 +1,9 @@
package org.bitcoins.node.networking.peer
import org.bitcoins.testkit.util.BitcoinSUnitTest
import org.bitcoins.testkit.BitcoinSTestAppConfig
import org.bitcoins.testkit.Implicits._
import org.bitcoins.node.config.NodeAppConfig
import org.bitcoins.core.protocol.blockchain.MerkleBlock
import org.bitcoins.testkit.core.gen.BlockchainElementsGenerator
import org.bitcoins.testkit.core.gen.TransactionGenerators
@ -15,6 +17,10 @@ import scala.util.Try
import scala.util.Failure
class MerkleBuffersTest extends BitcoinSUnitTest {
implicit private val config: NodeAppConfig =
BitcoinSTestAppConfig.getTestConfig().nodeConf
behavior of "MerkleBuffers"
it must "match a merkle block with its corresponding transactions" in {

View File

@ -0,0 +1,24 @@
package org.bitcoins.node
import org.slf4j.Logger
import org.bitcoins.node.config.NodeAppConfig
import org.bitcoins.db.AppLoggers
/** Exposes access to the P2P submodule logger */
private[bitcoins] trait P2PLogger {
private var _logger: Logger = _
protected def logger(implicit config: NodeAppConfig) = {
if (_logger == null) {
_logger = P2PLogger.getLogger
}
_logger
}
}
private[bitcoins] object P2PLogger extends AppLoggers {
/**
* @return the peer-to-peer submobule logger
*/
def getLogger(implicit conf: NodeAppConfig) = getLoggerImpl(LoggerKind.P2P)
}

View File

@ -9,7 +9,6 @@ import org.bitcoins.core.bloom.BloomFilter
import org.bitcoins.core.p2p.NetworkPayload
import org.bitcoins.core.protocol.BitcoinAddress
import org.bitcoins.core.protocol.transaction.Transaction
import org.bitcoins.db.P2PLogger
import org.bitcoins.node.config.NodeAppConfig
import org.bitcoins.node.models.{
BroadcastAbleTransaction,
@ -83,8 +82,7 @@ case class SpvNode(
* @return SPV node with the updated bloom filter
*/
def updateBloomFilter(transaction: Transaction): Future[SpvNode] = {
logger(nodeAppConfig).info(
s"Updating bloom filter with transaction=${transaction.txIdBE}")
logger.info(s"Updating bloom filter with transaction=${transaction.txIdBE}")
val newBloom = bloomFilter.update(transaction)
// we could send filteradd messages, but we would
@ -103,7 +101,7 @@ case class SpvNode(
* @return SPV node with the updated bloom filter
*/
def updateBloomFilter(address: BitcoinAddress): Future[SpvNode] = {
logger(nodeAppConfig).info(s"Updating bloom filter with address=$address")
logger.info(s"Updating bloom filter with address=$address")
val hash = address.hash
val newBloom = bloomFilter.insert(hash)
val sentFilterAddF = peerMsgSenderF.map(_.sendFilterAddMessage(hash))
@ -125,7 +123,7 @@ case class SpvNode(
/** Starts our spv node */
def start(): Future[SpvNode] = {
logger(nodeAppConfig).info("Starting spv node")
logger.info("Starting spv node")
val start = System.currentTimeMillis()
for {
_ <- nodeAppConfig.initialize()
@ -135,30 +133,26 @@ case class SpvNode(
_ <- AsyncUtil.retryUntilSatisfiedF(() => isInitialized)
} yield ()
isInitializedF.failed.foreach(
err =>
logger(nodeAppConfig).error(
s"Failed to connect with peer=$peer with err=${err}"))
isInitializedF.failed.foreach(err =>
logger.error(s"Failed to connect with peer=$peer with err=${err}"))
isInitializedF.map { _ =>
logger(nodeAppConfig).info(s"Our peer=${peer} has been initialized")
logger(nodeAppConfig).info(
s"Our spv node has been full started. It took=${System
.currentTimeMillis() - start}ms")
logger.info(s"Our peer=${peer} has been initialized")
logger.info(s"Our spv node has been full started. It took=${System
.currentTimeMillis() - start}ms")
this
}
}
_ <- peerMsgSenderF.map(_.sendFilterLoadMessage(bloomFilter))
} yield {
logger(nodeAppConfig).info(
s"Sending bloomfilter=${bloomFilter.hex} to $peer")
logger.info(s"Sending bloomfilter=${bloomFilter.hex} to $peer")
node
}
}
/** Stops our spv node */
def stop(): Future[SpvNode] = {
logger(nodeAppConfig).info(s"Stopping spv node")
logger.info(s"Stopping spv node")
val disconnectF = for {
p <- peerMsgSenderF
disconnect <- p.disconnect()
@ -166,13 +160,13 @@ case class SpvNode(
val start = System.currentTimeMillis()
val isStoppedF = disconnectF.flatMap { _ =>
logger(nodeAppConfig).info(s"Awaiting disconnect")
logger.info(s"Awaiting disconnect")
//25 seconds to disconnect
AsyncUtil.retryUntilSatisfiedF(() => isDisconnected, 500.millis)
}
isStoppedF.map { _ =>
logger(nodeAppConfig).info(
logger.info(
s"Spv node stopped! It took=${System.currentTimeMillis() - start}ms")
this
}
@ -184,14 +178,13 @@ case class SpvNode(
txDAO.create(broadcastTx).onComplete {
case Failure(exception) =>
logger(nodeAppConfig)
.error(s"Error when writing broadcastable TX to DB", exception)
logger.error(s"Error when writing broadcastable TX to DB", exception)
case Success(written) =>
logger(nodeAppConfig).debug(
logger.debug(
s"Wrote tx=${written.transaction.txIdBE} to broadcastable table")
}
logger(nodeAppConfig).info(s"Sending out inv for tx=${transaction.txIdBE}")
logger.info(s"Sending out inv for tx=${transaction.txIdBE}")
peerMsgSenderF.flatMap(_.sendInventoryMessage(transaction))
}
@ -221,8 +214,7 @@ case class SpvNode(
.map(_.get) // .get is safe since this is an internal call
} yield {
peerMsgSenderF.map(_.sendGetHeadersMessage(hash.flip))
logger(nodeAppConfig).info(
s"Starting sync node, height=${header.height} hash=$hash")
logger.info(s"Starting sync node, height=${header.height} hash=$hash")
}
}
}

View File

@ -2,7 +2,6 @@ package org.bitcoins.node.networking
import akka.actor.{Actor, ActorRef, ActorRefFactory, Props}
import akka.io.{IO, Tcp}
import akka.pattern.AskTimeoutException
import akka.util.{ByteString, CompactByteString, Timeout}
import org.bitcoins.core.config.NetworkParameters
import org.bitcoins.core.p2p.NetworkMessage
@ -17,7 +16,7 @@ import org.bitcoins.node.config.NodeAppConfig
import scala.annotation.tailrec
import scala.util._
import org.bitcoins.db.P2PLogger
import org.bitcoins.node.P2PLogger
import scala.concurrent.{Await, ExecutionContext, Future}
import scala.concurrent.duration.DurationInt

View File

@ -4,7 +4,7 @@ import org.bitcoins.chain.api.ChainApi
import org.bitcoins.core.p2p.{Inventory, MsgUnassigned, TypeIdentifier, _}
import org.bitcoins.core.protocol.blockchain.{Block, MerkleBlock}
import org.bitcoins.core.protocol.transaction.Transaction
import org.bitcoins.db.P2PLogger
import org.bitcoins.node.P2PLogger
import org.bitcoins.node.SpvNodeCallbacks
import org.bitcoins.node.config.NodeAppConfig
import org.bitcoins.node.models.BroadcastAbleTransactionDAO

View File

@ -1,9 +1,10 @@
package org.bitcoins.node.networking.peer
import org.bitcoins.core.util.BitcoinSLogger
import org.bitcoins.node.P2PLogger
import scala.collection.mutable
import org.bitcoins.core.protocol.blockchain.MerkleBlock
import org.bitcoins.core.protocol.transaction.Transaction
import org.bitcoins.node.config.NodeAppConfig
/**
* A buffer of merkleblocks and the transactions associated with them.
@ -16,14 +17,14 @@ import org.bitcoins.core.protocol.transaction.Transaction
* This buffer is responsible for calling the approriate callbacks
* once a merkle block has received all its transactions.
*/
private[peer] object MerkleBuffers extends BitcoinSLogger {
private[peer] object MerkleBuffers extends P2PLogger {
private type MerkleBlocksWithTransactions =
mutable.Map[MerkleBlock, mutable.Builder[Transaction, Vector[Transaction]]]
private val underlyingMap: MerkleBlocksWithTransactions = mutable.Map.empty
/** Adds the given merkleblock to the buffer */
def putMerkle(merkle: MerkleBlock): Unit = {
def putMerkle(merkle: MerkleBlock)(implicit config: NodeAppConfig): Unit = {
val tree = merkle.partialMerkleTree
val matches = tree.extractMatches
@ -56,7 +57,8 @@ private[peer] object MerkleBuffers extends BitcoinSLogger {
*/
def putTx(
tx: Transaction,
callbacks: Seq[DataMessageHandler.OnMerkleBlockReceived]): Boolean = {
callbacks: Seq[DataMessageHandler.OnMerkleBlockReceived])(
implicit config: NodeAppConfig): Boolean = {
val blocksInBuffer = underlyingMap.keys.toList
logger.trace(s"Looking for transaction=${tx.txIdBE} in merkleblock buffer")
logger.trace(s"Merkleblocks in buffer: ${blocksInBuffer.length}")
@ -81,7 +83,8 @@ private[peer] object MerkleBuffers extends BitcoinSLogger {
private def handleMerkleMatch(
transaction: Transaction,
merkleBlock: MerkleBlock,
callbacks: Seq[DataMessageHandler.OnMerkleBlockReceived]) = {
callbacks: Seq[DataMessageHandler.OnMerkleBlockReceived])(
implicit config: NodeAppConfig) = {
val merkleBlockMatches = merkleBlock.partialMerkleTree.extractMatches
val merkleHash = merkleBlock.blockHeader.hashBE

View File

@ -2,62 +2,4 @@ package org.bitcoins.node.networking.peer
import org.bitcoins.node.networking.P2PClient
/*
abstract class PeerHandler extends BitcoinSLogger {
implicit val system: ActorSystem
implicit val ec: ExecutionContext = system.dispatcher
implicit val timeout: Timeout
def socket: InetSocketAddress
def dbConfig: DbConfig
def peerMsgSender: PeerMessageSender
def getHeaders(getHeadersMsg: GetHeadersMessage): Unit = {
sendToPeer(getHeadersMsg)
}
/** Connects with our peer*/
def connect(): Future[Unit] = {
pee
}
/** Checks if we are connected with our peer */
def isConnected: Boolean = ???
/** Closes our connection with our peer */
def close(): Future[Unit] = {
val closedF = (peerMsgSender.actor ? Tcp.Close).mapTo[Tcp.Closed.type]
closedF.map(_ => ())
}
}
object PeerHandler {
private case class PeerHandlerImpl(
peerMsgSender: PeerMessageSender,
socket: InetSocketAddress,
dbConfig: DbConfig)(
override implicit val system: ActorSystem,
val timeout: Timeout)
extends PeerHandler
def apply(
peerMsgSender: PeerMessageSender,
socket: InetSocketAddress,
dbConfig: DbConfig)(
implicit system: ActorSystem,
timeout: Timeout): PeerHandler = {
PeerHandlerImpl(peerMsgSender, socket, dbConfig)(system, timeout)
}
/* def apply(peer: Peer, dbConfig: DbConfig)(implicit system: ActorSystem, timeout: Timeout): PeerHandler = {
val actorRef = PeerMessageHandler(dbConfig = dbConfig)
PeerHandler(actorRef,peer.socket,dbConfig)
}*/
}
*/
case class PeerHandler(p2pClient: P2PClient, peerMsgSender: PeerMessageSender)

View File

@ -6,7 +6,7 @@ import org.bitcoins.chain.blockchain.ChainHandler
import org.bitcoins.chain.config.ChainAppConfig
import org.bitcoins.chain.models.BlockHeaderDAO
import org.bitcoins.core.p2p.{NetworkMessage, _}
import org.bitcoins.db.P2PLogger
import org.bitcoins.node.P2PLogger
import org.bitcoins.node.SpvNodeCallbacks
import org.bitcoins.node.config.NodeAppConfig
import org.bitcoins.node.models.Peer
@ -54,7 +54,7 @@ class PeerMessageReceiver(
new RuntimeException(s"Cannot call connect when in state=${bad}")
)
case Preconnection =>
logger(nodeAppConfig).info(s"Connection established with peer=${peer}")
logger.info(s"Connection established with peer=${peer}")
val newState = Preconnection.toInitializing(client)
@ -69,7 +69,7 @@ class PeerMessageReceiver(
}
protected[networking] def disconnect(): Future[PeerMessageReceiver] = {
logger(nodeAppConfig).trace(s"Disconnecting with internalstate=${state}")
logger.trace(s"Disconnecting with internalstate=${state}")
state match {
case bad @ (_: Initializing | _: Disconnected | Preconnection) =>
Future.failed(
@ -78,7 +78,7 @@ class PeerMessageReceiver(
)
case good: Normal =>
logger(nodeAppConfig).debug(s"Disconnected bitcoin peer=${peer}")
logger.debug(s"Disconnected bitcoin peer=${peer}")
val newState = Disconnected(
clientConnectP = good.clientConnectP,
clientDisconnectP = good.clientDisconnectP.success(()),
@ -113,7 +113,7 @@ class PeerMessageReceiver(
//create a way to send a response if we need too
val peerMsgSender = PeerMessageSender(client)
logger(nodeAppConfig).debug(
logger.debug(
s"Received message=${networkMsgRecv.msg.header.commandName} from peer=${client.peer} state=${state} ")
networkMsgRecv.msg.payload match {
case controlPayload: ControlPayload =>
@ -159,8 +159,7 @@ class PeerMessageReceiver(
payload match {
case versionMsg: VersionMessage =>
logger(nodeAppConfig).trace(
s"Received versionMsg=${versionMsg}from peer=${peer}")
logger.trace(s"Received versionMsg=${versionMsg}from peer=${peer}")
state match {
case bad @ (_: Disconnected | _: Normal | Preconnection) =>

View File

@ -9,7 +9,7 @@ import org.bitcoins.core.p2p._
import org.bitcoins.node.networking.P2PClient
import org.bitcoins.node.config.NodeAppConfig
import org.bitcoins.core.protocol.transaction.Transaction
import org.bitcoins.db.P2PLogger
import org.bitcoins.node.P2PLogger
import org.bitcoins.core.crypto.HashDigest
import org.bitcoins.core.bloom.BloomFilter
import org.bitcoins.core.protocol.blockchain.BlockHeader

View File

@ -10,10 +10,20 @@ object BitcoinSTestAppConfig {
* App configuration suitable for test purposes:
*
* 1) Data directory is set to user temp directory
* 2) Logging is turned down to WARN
*/
def getTestConfig(config: Config*): BitcoinSAppConfig = {
val overrideConf = ConfigFactory.parseString {
"""
|bitcoin-s {
| logging {
| level = WARN
| }
|}
""".stripMargin
}
val tmpDir = Files.createTempDirectory("bitcoin-s-")
BitcoinSAppConfig(tmpDir, config: _*)
BitcoinSAppConfig(tmpDir, (overrideConf +: config): _*)
}
sealed trait ProjectType

View File

@ -4,6 +4,7 @@ import java.net.InetSocketAddress
import akka.actor.ActorSystem
import com.typesafe.config.ConfigFactory
import org.bitcoins.chain.ChainVerificationLogger
import org.bitcoins.chain.blockchain.ChainHandler
import org.bitcoins.chain.config.ChainAppConfig
import org.bitcoins.chain.db.ChainDbManagement
@ -13,7 +14,6 @@ import org.bitcoins.chain.models.{
BlockHeaderDbHelper
}
import org.bitcoins.core.protocol.blockchain.{Block, BlockHeader, ChainParams}
import org.bitcoins.core.util.BitcoinSLogger
import org.bitcoins.rpc.client.common.BitcoindRpcClient
import org.bitcoins.testkit.chain
import org.bitcoins.testkit.chain.fixture._
@ -35,7 +35,7 @@ trait ChainUnitTest
with BitcoinSFixture
with ChainFixtureHelper
with MustMatchers
with BitcoinSLogger
with ChainVerificationLogger
with BeforeAndAfter
with BeforeAndAfterAll {
@ -299,7 +299,7 @@ trait ChainUnitTest
}
}
object ChainUnitTest extends BitcoinSLogger {
object ChainUnitTest extends ChainVerificationLogger {
/** Height of the first block in populated fixtures */
val FIRST_BLOCK_HEIGHT: Int = 562375

View File

@ -9,7 +9,11 @@ import org.scalatest._
import scala.concurrent.{Future, Promise}
import scala.util.{Failure, Success}
trait BitcoinSFixture extends fixture.AsyncFlatSpec with BitcoinSLogger {
trait BitcoinSFixture extends fixture.AsyncFlatSpec {
// to avoid this trickling up to things that extend
// this trait
private val logger = BitcoinSLogger.logger
/**
* Given functions to build and destroy a fixture, returns a OneArgAsyncTest => FutureOutcome

View File

@ -18,13 +18,13 @@ import scala.concurrent.Future
import scala.concurrent.ExecutionContext
import scala.concurrent.duration._
import akka.actor.ActorSystem
import org.bitcoins.core.util.BitcoinSLogger
import org.bitcoins.testkit.async.TestAsyncUtil
import org.bitcoins.core.bloom.BloomFilter
import org.bitcoins.core.bloom.BloomUpdateAll
import org.bitcoins.core.crypto.DoubleSha256DigestBE
import org.bitcoins.node.P2PLogger
abstract class NodeTestUtil extends BitcoinSLogger {
abstract class NodeTestUtil extends P2PLogger {
//txid on testnet 44e504f5b7649d215be05ad9f09026dee95201244a3b218013c504a6a49a26ff
//this tx has multiple inputs and outputs

View File

@ -2,10 +2,10 @@ package org.bitcoins.testkit.node
import akka.actor.ActorSystem
import akka.testkit.TestKit
import org.bitcoins.node.P2PLogger
import org.bitcoins.chain.config.ChainAppConfig
import org.bitcoins.chain.api.ChainApi
import org.bitcoins.core.config.NetworkParameters
import org.bitcoins.core.util.BitcoinSLogger
import org.bitcoins.db.AppConfig
import org.bitcoins.node.{SpvNode, SpvNodeCallbacks}
import org.bitcoins.node.config.NodeAppConfig
@ -41,7 +41,7 @@ import scala.concurrent.{ExecutionContext, Future}
trait NodeUnitTest
extends BitcoinSFixture
with MustMatchers
with BitcoinSLogger
with P2PLogger
with BeforeAndAfter
with BeforeAndAfterAll {
@ -139,7 +139,7 @@ trait NodeUnitTest
}
}
object NodeUnitTest extends BitcoinSLogger {
object NodeUnitTest extends P2PLogger {
/**
* Creates

View File

@ -4,7 +4,6 @@ import akka.actor.ActorSystem
import akka.testkit.TestKit
import org.bitcoins.core.config.RegTest
import org.bitcoins.core.protocol.blockchain.ChainParams
import org.bitcoins.core.util.BitcoinSLogger
import org.bitcoins.rpc.client.common.BitcoindRpcClient
import org.bitcoins.testkit.fixtures.BitcoinSFixture
import org.bitcoins.wallet.Wallet
@ -14,6 +13,7 @@ import org.bitcoins.wallet.api.{
UnlockedWalletApi
}
import org.bitcoins.wallet.db.{WalletDbManagement}
import org.bitcoins.wallet.WalletLogger
import org.scalatest._
import scala.concurrent.duration.{DurationInt, FiniteDuration}
@ -21,6 +21,7 @@ import scala.concurrent.{ExecutionContext, Future}
import org.bitcoins.core.currency._
import org.bitcoins.db.AppConfig
import org.bitcoins.server.BitcoinSAppConfig
import org.bitcoins.server.BitcoinSAppConfig._
import com.typesafe.config.Config
import com.typesafe.config.ConfigFactory
import org.bitcoins.testkit.BitcoinSTestAppConfig
@ -29,7 +30,7 @@ trait BitcoinSWalletTest
extends fixture.AsyncFlatSpec
with BitcoinSFixture
with BeforeAndAfterAll
with BitcoinSLogger {
with WalletLogger {
import BitcoinSWalletTest._
implicit val actorSystem: ActorSystem = ActorSystem(getClass.getSimpleName)
implicit val ec: ExecutionContext = actorSystem.dispatcher
@ -103,7 +104,7 @@ trait BitcoinSWalletTest
}
object BitcoinSWalletTest extends BitcoinSLogger {
object BitcoinSWalletTest extends WalletLogger {
case class WalletWithBitcoind(
wallet: UnlockedWalletApi,

View File

@ -1,7 +1,6 @@
package org.bitcoins.wallet
import org.bitcoins.core.crypto._
import org.bitcoins.core.util.BitcoinSLogger
import scodec.bits.ByteVector
import scala.util.{Failure, Success, Try}

View File

@ -17,7 +17,6 @@ import scodec.bits.BitVector
import scala.concurrent.{ExecutionContext, Future}
import scala.util.{Failure, Success, Try}
import org.bitcoins.db.KeyHandlingLogger
sealed abstract class Wallet extends LockedWallet with UnlockedWalletApi {

View File

@ -0,0 +1,45 @@
package org.bitcoins.wallet
import org.slf4j.Logger
import org.bitcoins.wallet.config.WalletAppConfig
import org.bitcoins.db.AppLoggers
/** Exposes acccess to the wallet logger */
private[bitcoins] trait WalletLogger {
private var _logger: Logger = _
protected[bitcoins] def logger(implicit config: WalletAppConfig) = {
if (_logger == null) {
_logger = WalletLogger.getLogger
}
_logger
}
}
private[bitcoins] object WalletLogger extends AppLoggers {
/**
* @return the generic wallet logger (i.e. everything not related to key handling)
*/
def getLogger(implicit conf: WalletAppConfig): Logger =
getLoggerImpl(LoggerKind.Wallet)
}
/** Exposes access to the key handling logger */
private[bitcoins] trait KeyHandlingLogger {
private var _logger: Logger = _
protected[bitcoins] def logger(implicit config: WalletAppConfig) = {
if (_logger == null) {
_logger = KeyHandlingLogger.getLogger
}
_logger
}
}
private[bitcoins] object KeyHandlingLogger extends AppLoggers {
/**
* @return the key handling submobule logger
*/
def getLogger(implicit conf: WalletAppConfig): Logger =
getLoggerImpl(LoggerKind.KeyHandling)
}

View File

@ -14,7 +14,6 @@ import java.nio.file.Path
import scala.util.Try
import org.bitcoins.wallet.config.WalletAppConfig
import org.bitcoins.core.crypto.AesIV
import org.bitcoins.db.KeyHandlingLogger
// what do we do if seed exists? error if they aren't equal?
object WalletStorage extends KeyHandlingLogger {

View File

@ -1,6 +1,6 @@
package org.bitcoins.wallet.internal
import org.bitcoins.wallet.LockedWallet
import org.bitcoins.wallet._
import scala.concurrent.Future
import org.bitcoins.wallet.models.AddressDb
import org.bitcoins.core.crypto.ECPublicKey
@ -22,7 +22,6 @@ import org.bitcoins.core.protocol.script.ScriptPubKey
import org.bitcoins.core.protocol.transaction.TransactionOutPoint
import org.bitcoins.core.number.UInt32
import org.bitcoins.core.hd.AddressType
import org.bitcoins.db.KeyHandlingLogger
/**
* Provides functionality related to addresses. This includes

View File

@ -1,7 +1,7 @@
package org.bitcoins.wallet.internal
import org.bitcoins.wallet.LockedWallet
import org.bitcoins.core.protocol.transaction.Transaction
import org.bitcoins.wallet._
import org.bitcoins.wallet.models._
import scala.concurrent.Future
import org.bitcoins.core.protocol.transaction.TransactionOutput
@ -9,7 +9,6 @@ import org.bitcoins.wallet.api.AddUtxoSuccess
import org.bitcoins.wallet.api.AddUtxoError
import org.bitcoins.core.number.UInt32
import org.bitcoins.core.util.FutureUtil
import org.bitcoins.db.KeyHandlingLogger
/** Provides functionality for processing transactions. This
* includes importing UTXOs spent to our wallet, updating

View File

@ -22,7 +22,7 @@ import org.bitcoins.core.protocol.BitcoinAddress
import scala.util.Success
import scala.util.Failure
import org.bitcoins.core.crypto.DoubleSha256DigestBE
import org.bitcoins.db.KeyHandlingLogger
import org.bitcoins.wallet.KeyHandlingLogger
/**
* Provides functionality related to handling UTXOs in our wallet.