mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-22 22:36:34 +01:00
Add option to correctly use logback config (#1398)
* Logger now uses correct parent logger for all, names appenders correctly * Set logback to true for tests, rename file * Fix docs
This commit is contained in:
parent
11255390d2
commit
99db9062ac
25 changed files with 135 additions and 72 deletions
|
@ -3,6 +3,9 @@ bitcoin-s {
|
|||
network = regtest # regtest, testnet3, mainnet
|
||||
|
||||
logging {
|
||||
# Ignore bitcoin-s logging config and use a logback config
|
||||
logback = false
|
||||
|
||||
level = WARN # trace, debug, info, warn, error, off
|
||||
|
||||
# You can also tune specific module loggers.
|
||||
|
|
|
@ -22,9 +22,9 @@ import org.bitcoins.db.AppConfig
|
|||
case class BitcoinSAppConfig(
|
||||
private val directory: Path,
|
||||
private val confs: Config*)(implicit ec: ExecutionContext) {
|
||||
val walletConf = WalletAppConfig(directory, confs: _*)
|
||||
val nodeConf = NodeAppConfig(directory, confs: _*)
|
||||
val chainConf = ChainAppConfig(directory, confs: _*)
|
||||
val walletConf: WalletAppConfig = WalletAppConfig(directory, false, confs: _*)
|
||||
val nodeConf: NodeAppConfig = NodeAppConfig(directory, false, confs: _*)
|
||||
val chainConf: ChainAppConfig = ChainAppConfig(directory, false, confs: _*)
|
||||
|
||||
/** Initializes the wallet, node and chain projects */
|
||||
def initialize()(implicit ec: ExecutionContext): Future[Unit] = {
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
package org.bitcoins.server
|
||||
|
||||
import org.bitcoins.db.{AppConfig, AppLoggers, MarkedLogger}
|
||||
import org.bitcoins.db.{AppLoggers, LoggerConfig}
|
||||
import org.slf4j.Logger
|
||||
|
||||
/** Exposes access to the HTTP RPC server logger */
|
||||
private[bitcoins] trait HttpLogger {
|
||||
private var _logger: MarkedLogger = _
|
||||
protected[bitcoins] def logger(implicit config: AppConfig) = {
|
||||
private var _logger: Logger = _
|
||||
protected[bitcoins] def logger(implicit config: LoggerConfig): Logger = {
|
||||
if (_logger == null) {
|
||||
_logger = HttpLoggerImpl(config).getLogger
|
||||
}
|
||||
|
@ -13,12 +14,12 @@ private[bitcoins] trait HttpLogger {
|
|||
}
|
||||
}
|
||||
|
||||
private[server] case class HttpLoggerImpl(override val conf: AppConfig)
|
||||
private[server] case class HttpLoggerImpl(override val conf: LoggerConfig)
|
||||
extends AppLoggers {
|
||||
|
||||
/**
|
||||
* @return the HTTP RPC server submobule logger
|
||||
*/
|
||||
def getLogger: MarkedLogger =
|
||||
def getLogger: Logger =
|
||||
getLoggerImpl(LoggerKind.Http)
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
package org.bitcoins.server
|
||||
|
||||
import upickle.{default => up}
|
||||
import akka.actor.ActorSystem
|
||||
import akka.http.scaladsl._
|
||||
import akka.stream.ActorMaterializer
|
||||
import akka.http.scaladsl.model._
|
||||
import akka.http.scaladsl.server._
|
||||
import akka.http.scaladsl.server.Directives._
|
||||
import de.heikoseeberger.akkahttpupickle.UpickleSupport._
|
||||
import akka.http.scaladsl.server.directives.DebuggingDirectives
|
||||
import akka.event.Logging
|
||||
import akka.http.scaladsl._
|
||||
import akka.http.scaladsl.model._
|
||||
import akka.http.scaladsl.server.Directives._
|
||||
import akka.http.scaladsl.server._
|
||||
import akka.http.scaladsl.server.directives.DebuggingDirectives
|
||||
import akka.stream.ActorMaterializer
|
||||
import de.heikoseeberger.akkahttpupickle.UpickleSupport._
|
||||
import org.bitcoins.db.AppConfig
|
||||
import upickle.{default => up}
|
||||
|
||||
import scala.concurrent.Future
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ import org.scalatest.FutureOutcome
|
|||
|
||||
class ChainAppConfigTest extends ChainUnitTest {
|
||||
val tempDir = Files.createTempDirectory("bitcoin-s")
|
||||
val config = ChainAppConfig(directory = tempDir)
|
||||
val config = ChainAppConfig(directory = tempDir, useLogbackConf = false)
|
||||
|
||||
//if we don't turn off logging here, isInitF a few lines down will
|
||||
//produce some nasty error logs since we are testing initialization
|
||||
|
@ -72,7 +72,7 @@ class ChainAppConfigTest extends ChainUnitTest {
|
|||
""".stripMargin
|
||||
val _ = Files.write(tempFile, confStr.getBytes())
|
||||
|
||||
val appConfig = ChainAppConfig(directory = tempDir)
|
||||
val appConfig = ChainAppConfig(directory = tempDir, useLogbackConf = false)
|
||||
|
||||
assert(appConfig.datadir == tempDir.resolve("testnet3"))
|
||||
assert(appConfig.network == TestNet3)
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package org.bitcoins.chain
|
||||
|
||||
import org.bitcoins.db.{AppLoggers, MarkedLogger}
|
||||
import org.bitcoins.chain.config.ChainAppConfig
|
||||
import org.bitcoins.db.{AppLoggers, LoggerConfig}
|
||||
import org.slf4j.Logger
|
||||
|
||||
/** Exposes access to the chain verification logger */
|
||||
private[bitcoins] trait ChainVerificationLogger {
|
||||
private var _logger: MarkedLogger = _
|
||||
protected[bitcoins] def logger(implicit config: ChainAppConfig) = {
|
||||
private var _logger: Logger = _
|
||||
protected[bitcoins] def logger(implicit config: LoggerConfig): Logger = {
|
||||
if (_logger == null) {
|
||||
_logger = ChainVerificationLoggerImpl(config).getLogger
|
||||
}
|
||||
|
@ -15,12 +15,12 @@ private[bitcoins] trait ChainVerificationLogger {
|
|||
}
|
||||
|
||||
private[chain] case class ChainVerificationLoggerImpl(
|
||||
override val conf: ChainAppConfig)
|
||||
override val conf: LoggerConfig)
|
||||
extends AppLoggers {
|
||||
|
||||
/**
|
||||
* @return the chain verification submobule logger
|
||||
*/
|
||||
def getLogger: MarkedLogger =
|
||||
def getLogger: Logger =
|
||||
getLoggerImpl(LoggerKind.ChainVerification)
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import scala.concurrent.{ExecutionContext, Future}
|
|||
*/
|
||||
case class ChainAppConfig(
|
||||
private val directory: Path,
|
||||
override val useLogbackConf: Boolean,
|
||||
private val confs: Config*)(implicit override val ec: ExecutionContext)
|
||||
extends AppConfig
|
||||
with ChainDbManagement
|
||||
|
@ -26,7 +27,7 @@ case class ChainAppConfig(
|
|||
override protected[bitcoins] type ConfigType = ChainAppConfig
|
||||
override protected[bitcoins] def newConfigOfType(
|
||||
configs: Seq[Config]): ChainAppConfig =
|
||||
ChainAppConfig(directory, configs: _*)
|
||||
ChainAppConfig(directory, useLogbackConf, configs: _*)
|
||||
protected[bitcoins] def baseDatadir: Path = directory
|
||||
|
||||
override def appConfig: ChainAppConfig = this
|
||||
|
@ -99,7 +100,9 @@ object ChainAppConfig {
|
|||
/** Constructs a chain verification configuration from the default Bitcoin-S
|
||||
* data directory and given list of configuration overrides.
|
||||
*/
|
||||
def fromDefaultDatadir(confs: Config*)(
|
||||
def fromDefaultDatadir(useLogbackConf: Boolean, confs: Config*)(
|
||||
implicit ec: ExecutionContext): ChainAppConfig =
|
||||
ChainAppConfig(AppConfig.DEFAULT_BITCOIN_S_DATADIR, confs: _*)
|
||||
ChainAppConfig(AppConfig.DEFAULT_BITCOIN_S_DATADIR,
|
||||
useLogbackConf,
|
||||
confs: _*)
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ class DbManagementTest extends BitcoinSAsyncTest {
|
|||
|
||||
it must "run migrations for chain db" in {
|
||||
val chainAppConfig = ChainAppConfig(BitcoinSTestAppConfig.tmpDir(),
|
||||
useLogbackConf = false,
|
||||
dbConfig(ProjectType.Chain))
|
||||
val chainDbManagement = createChainDbManagement(chainAppConfig)
|
||||
val result = chainDbManagement.migrate()
|
||||
|
@ -52,6 +53,7 @@ class DbManagementTest extends BitcoinSAsyncTest {
|
|||
|
||||
it must "run migrations for wallet db" in {
|
||||
val walletAppConfig = WalletAppConfig(BitcoinSTestAppConfig.tmpDir(),
|
||||
useLogbackConf = false,
|
||||
dbConfig(ProjectType.Wallet))
|
||||
val walletDbManagement = createWalletDbManagement(walletAppConfig)
|
||||
val result = walletDbManagement.migrate()
|
||||
|
@ -60,7 +62,9 @@ class DbManagementTest extends BitcoinSAsyncTest {
|
|||
|
||||
it must "run migrations for node db" in {
|
||||
val nodeAppConfig =
|
||||
NodeAppConfig(BitcoinSTestAppConfig.tmpDir(), dbConfig(ProjectType.Node))
|
||||
NodeAppConfig(BitcoinSTestAppConfig.tmpDir(),
|
||||
useLogbackConf = false,
|
||||
dbConfig(ProjectType.Node))
|
||||
val nodeDbManagement = createNodeDbManagement(nodeAppConfig)
|
||||
val result = nodeDbManagement.migrate()
|
||||
assert(result == 1)
|
||||
|
|
|
@ -29,7 +29,7 @@ import ch.qos.logback.classic.Level
|
|||
* @see [[https://github.com/bitcoin-s/bitcoin-s-core/blob/master/doc/configuration.md `configuration.md`]]
|
||||
* for more information.
|
||||
*/
|
||||
abstract class AppConfig {
|
||||
abstract class AppConfig extends LoggerConfig {
|
||||
|
||||
private val logger = BitcoinSLogger.logger
|
||||
|
||||
|
@ -240,6 +240,8 @@ abstract class AppConfig {
|
|||
baseDatadir.resolve(lastDirname)
|
||||
}
|
||||
|
||||
override val logFile: Path = datadir.resolve("bitcoin-s.log")
|
||||
|
||||
private def stringToLogLevel(str: String): Option[Level] =
|
||||
str.toLowerCase() match {
|
||||
case "trace" => Some(Level.TRACE)
|
||||
|
@ -279,25 +281,29 @@ abstract class AppConfig {
|
|||
}
|
||||
|
||||
/** The logging level for our P2P logger */
|
||||
lazy val p2pLogLevel: Level = levelOrDefault("logging.p2p")
|
||||
override lazy val p2pLogLevel: Level = levelOrDefault("logging.p2p")
|
||||
|
||||
/** The logging level for our chain verification logger */
|
||||
lazy val verificationLogLevel: Level =
|
||||
override lazy val verificationLogLevel: Level =
|
||||
levelOrDefault("logging.chain-verification")
|
||||
|
||||
/** The logging level for our key handling logger */
|
||||
lazy val keyHandlingLogLevel: Level =
|
||||
override lazy val keyHandlingLogLevel: Level =
|
||||
levelOrDefault("logging.key-handling")
|
||||
|
||||
/** Logging level for wallet */
|
||||
lazy val walletLogLeveL: Level =
|
||||
override lazy val walletLogLevel: Level =
|
||||
levelOrDefault("logging.wallet")
|
||||
|
||||
/** Logging level for HTTP RPC server */
|
||||
lazy val httpLogLevel: Level = levelOrDefault("logging.http")
|
||||
override lazy val httpLogLevel: Level = levelOrDefault("logging.http")
|
||||
|
||||
/** Logging level for database interactions */
|
||||
lazy val databaseLogLevel: Level = levelOrDefault("logging.database")
|
||||
override lazy val databaseLogLevel: Level = levelOrDefault("logging.database")
|
||||
|
||||
/** Use logback config instead */
|
||||
override val useLogbackConf: Boolean =
|
||||
config.getBooleanOrElse("logging.logback", default = false)
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,15 @@ package object db {
|
|||
None
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns the boolean at key or the given default value */
|
||||
def getBooleanOrElse(key: String, default: => Boolean): Boolean = {
|
||||
if (config.hasPath(key)) {
|
||||
config.getBoolean(key)
|
||||
} else {
|
||||
default
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -60,7 +60,7 @@ val config = ConfigFactory.parseString {
|
|||
|""".stripMargin
|
||||
}
|
||||
|
||||
implicit val chainConfig = ChainAppConfig(datadir, config)
|
||||
implicit val chainConfig = ChainAppConfig(datadir, false, config)
|
||||
|
||||
// Initialize the needed database tables if they don't exist:
|
||||
val chainProjectInitF = chainConfig.initialize()
|
||||
|
|
|
@ -28,16 +28,16 @@ import scala.util.Properties
|
|||
import scala.concurrent.ExecutionContext.Implicits.global
|
||||
|
||||
// reads $HOME/.bitcoin-s/
|
||||
val defaultConfig = WalletAppConfig.fromDefaultDatadir()
|
||||
val defaultConfig = WalletAppConfig.fromDefaultDatadir(false)
|
||||
|
||||
|
||||
// reads a custom data directory
|
||||
val customDirectory = Paths.get(Properties.userHome, "custom-bitcoin-s-directory")
|
||||
val configFromCustomDatadir = WalletAppConfig(customDirectory)
|
||||
val configFromCustomDatadir = WalletAppConfig(customDirectory, false)
|
||||
|
||||
// reads a custom data directory and overrides the network to be testnet3
|
||||
val customOverride = ConfigFactory.parseString("bitcoin-s.network = testnet3")
|
||||
val configFromCustomDirAndOverride = WalletAppConfig(customDirectory, customOverride)
|
||||
val configFromCustomDirAndOverride = WalletAppConfig(customDirectory, false, customOverride)
|
||||
```
|
||||
|
||||
You can pass as many `com.typesafe.config.Config`s as you'd like. If any
|
||||
|
@ -75,6 +75,9 @@ bitcoin-s {
|
|||
network = regtest # regtest, testnet3, mainnet
|
||||
|
||||
logging {
|
||||
# Ignore bitcoin-s logging config and use a logback config
|
||||
logback = false
|
||||
|
||||
level = WARN # trace, debug, info, warn, error, off
|
||||
|
||||
# You can also tune specific module loggers.
|
||||
|
|
|
@ -87,10 +87,10 @@ val config = ConfigFactory.parseString {
|
|||
val datadir = Files.createTempDirectory("bitcoin-s-wallet")
|
||||
|
||||
|
||||
implicit val walletConfig = WalletAppConfig(datadir, config)
|
||||
implicit val walletConfig = WalletAppConfig(datadir, false, config)
|
||||
|
||||
// we also need to store chain state for syncing purposes
|
||||
implicit val chainConfig = ChainAppConfig(datadir, config)
|
||||
implicit val chainConfig = ChainAppConfig(datadir, false, config)
|
||||
|
||||
// when this future completes, we have
|
||||
// created the necessary directories and
|
||||
|
|
|
@ -12,7 +12,9 @@ import java.nio.file.Files
|
|||
|
||||
class NodeAppConfigTest extends BitcoinSAsyncTest {
|
||||
val tempDir = Files.createTempDirectory("bitcoin-s")
|
||||
val config = NodeAppConfig(directory = tempDir)
|
||||
|
||||
val config: NodeAppConfig =
|
||||
NodeAppConfig(directory = tempDir, useLogbackConf = false)
|
||||
|
||||
it must "be overridable" in {
|
||||
assert(config.network == RegTest)
|
||||
|
@ -51,7 +53,7 @@ class NodeAppConfigTest extends BitcoinSAsyncTest {
|
|||
""".stripMargin
|
||||
val _ = Files.write(tempFile, confStr.getBytes())
|
||||
|
||||
val appConfig = NodeAppConfig(directory = tempDir)
|
||||
val appConfig = NodeAppConfig(directory = tempDir, useLogbackConf = false)
|
||||
|
||||
assert(appConfig.datadir == tempDir.resolve("testnet3"))
|
||||
assert(appConfig.network == TestNet3)
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.bitcoins.node.networking.peer.{
|
|||
}
|
||||
import org.bitcoins.node.util.BitcoinSNodeUtil.Mutable
|
||||
import org.bitcoins.rpc.util.AsyncUtil
|
||||
import org.slf4j.Logger
|
||||
|
||||
import scala.concurrent.duration.DurationInt
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
@ -54,6 +55,11 @@ trait Node extends NodeApi with ChainQueryApi with P2PLogger {
|
|||
this
|
||||
}
|
||||
|
||||
// Need to overwrite logger because nodeAppConfig and chainAppConfig are both
|
||||
// instances of LoggerConfig
|
||||
protected def logger(implicit config: NodeAppConfig): Logger =
|
||||
super.logger(config)
|
||||
|
||||
lazy val txDAO = BroadcastAbleTransactionDAO()
|
||||
|
||||
/** This is constructing a chain api from disk every time we call this method
|
||||
|
|
|
@ -5,8 +5,8 @@ import org.bitcoins.core.protocol.blockchain.{Block, BlockHeader, MerkleBlock}
|
|||
import org.bitcoins.core.protocol.transaction.Transaction
|
||||
import org.bitcoins.core.util.FutureUtil
|
||||
import org.bitcoins.crypto.DoubleSha256Digest
|
||||
import org.bitcoins.db.MarkedLogger
|
||||
import org.bitcoins.node.networking.peer.DataMessageHandler._
|
||||
import org.slf4j.Logger
|
||||
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
||||
|
@ -32,7 +32,7 @@ case class NodeCallbacks(
|
|||
onBlockHeadersReceived = onBlockHeadersReceived ++ other.onBlockHeadersReceived
|
||||
)
|
||||
|
||||
def executeOnTxReceivedCallbacks(logger: MarkedLogger, tx: Transaction)(
|
||||
def executeOnTxReceivedCallbacks(logger: Logger, tx: Transaction)(
|
||||
implicit ec: ExecutionContext): Future[Unit] = {
|
||||
onTxReceived
|
||||
.foldLeft(FutureUtil.unit)((acc, callback) =>
|
||||
|
@ -43,7 +43,7 @@ case class NodeCallbacks(
|
|||
}))
|
||||
}
|
||||
|
||||
def executeOnBlockReceivedCallbacks(logger: MarkedLogger, block: Block)(
|
||||
def executeOnBlockReceivedCallbacks(logger: Logger, block: Block)(
|
||||
implicit ec: ExecutionContext): Future[Unit] = {
|
||||
onBlockReceived
|
||||
.foldLeft(FutureUtil.unit)((acc, callback) =>
|
||||
|
@ -55,7 +55,7 @@ case class NodeCallbacks(
|
|||
}
|
||||
|
||||
def executeOnMerkleBlockReceivedCallbacks(
|
||||
logger: MarkedLogger,
|
||||
logger: Logger,
|
||||
merkleBlock: MerkleBlock,
|
||||
txs: Vector[Transaction])(implicit ec: ExecutionContext): Future[Unit] = {
|
||||
onMerkleBlockReceived
|
||||
|
@ -69,7 +69,7 @@ case class NodeCallbacks(
|
|||
}
|
||||
|
||||
def executeOnCompactFiltersReceivedCallbacks(
|
||||
logger: MarkedLogger,
|
||||
logger: Logger,
|
||||
blockFilters: Vector[(DoubleSha256Digest, GolombFilter)])(
|
||||
implicit ec: ExecutionContext): Future[Unit] = {
|
||||
onCompactFiltersReceived
|
||||
|
@ -84,7 +84,7 @@ case class NodeCallbacks(
|
|||
}
|
||||
|
||||
def executeOnBlockHeadersReceivedCallbacks(
|
||||
logger: MarkedLogger,
|
||||
logger: Logger,
|
||||
headers: Vector[BlockHeader])(
|
||||
implicit ec: ExecutionContext): Future[Unit] = {
|
||||
onBlockHeadersReceived
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package org.bitcoins.node
|
||||
|
||||
import org.bitcoins.node.config.NodeAppConfig
|
||||
import org.bitcoins.db.{AppLoggers, MarkedLogger}
|
||||
import org.bitcoins.db.{AppLoggers, LoggerConfig}
|
||||
import org.slf4j.Logger
|
||||
|
||||
/** Exposes access to the P2P submodule logger */
|
||||
private[bitcoins] trait P2PLogger {
|
||||
private var _logger: MarkedLogger = _
|
||||
protected def logger(implicit config: NodeAppConfig) = {
|
||||
private var _logger: Logger = _
|
||||
protected def logger(implicit config: LoggerConfig): Logger = {
|
||||
if (_logger == null) {
|
||||
_logger = P2PLoggerImpl(config).getLogger
|
||||
}
|
||||
|
@ -14,12 +14,12 @@ private[bitcoins] trait P2PLogger {
|
|||
}
|
||||
}
|
||||
|
||||
private[node] case class P2PLoggerImpl(override val conf: NodeAppConfig)
|
||||
private[node] case class P2PLoggerImpl(override val conf: LoggerConfig)
|
||||
extends AppLoggers {
|
||||
|
||||
/**
|
||||
* @return the peer-to-peer submobule logger
|
||||
*/
|
||||
def getLogger: MarkedLogger =
|
||||
def getLogger: Logger =
|
||||
getLoggerImpl(LoggerKind.P2P)
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ import scala.concurrent.{ExecutionContext, Future}
|
|||
*/
|
||||
case class NodeAppConfig(
|
||||
private val directory: Path,
|
||||
override val useLogbackConf: Boolean,
|
||||
private val confs: Config*)(implicit override val ec: ExecutionContext)
|
||||
extends AppConfig
|
||||
with NodeDbManagement
|
||||
|
@ -24,7 +25,7 @@ case class NodeAppConfig(
|
|||
override protected[bitcoins] type ConfigType = NodeAppConfig
|
||||
override protected[bitcoins] def newConfigOfType(
|
||||
configs: Seq[Config]): NodeAppConfig =
|
||||
NodeAppConfig(directory, configs: _*)
|
||||
NodeAppConfig(directory, useLogbackConf, configs: _*)
|
||||
|
||||
protected[bitcoins] def baseDatadir: Path = directory
|
||||
|
||||
|
@ -74,8 +75,10 @@ object NodeAppConfig {
|
|||
/** Constructs a node configuration from the default Bitcoin-S
|
||||
* data directory and given list of configuration overrides.
|
||||
*/
|
||||
def fromDefaultDatadir(confs: Config*)(
|
||||
def fromDefaultDatadir(useLogbackConf: Boolean, confs: Config*)(
|
||||
implicit ec: ExecutionContext): NodeAppConfig =
|
||||
NodeAppConfig(AppConfig.DEFAULT_BITCOIN_S_DATADIR, confs: _*)
|
||||
NodeAppConfig(AppConfig.DEFAULT_BITCOIN_S_DATADIR,
|
||||
useLogbackConf,
|
||||
confs: _*)
|
||||
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.bitcoins.crypto.{DoubleSha256Digest, DoubleSha256DigestBE}
|
|||
import org.bitcoins.node.config.NodeAppConfig
|
||||
import org.bitcoins.node.models.BroadcastAbleTransactionDAO
|
||||
import org.bitcoins.node.{NodeCallbacks, P2PLogger}
|
||||
import org.slf4j.Logger
|
||||
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
||||
|
@ -31,6 +32,11 @@ case class DataMessageHandler(
|
|||
chainConfig: ChainAppConfig)
|
||||
extends P2PLogger {
|
||||
|
||||
// Need to overwrite logger because nodeAppConfig and chainAppConfig are both
|
||||
// instances of LoggerConfig
|
||||
protected def logger(implicit config: NodeAppConfig): Logger =
|
||||
super.logger(config)
|
||||
|
||||
private val txDAO = BroadcastAbleTransactionDAO()
|
||||
|
||||
def handleDataPayload(
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.bitcoins.node.networking.peer.PeerMessageReceiverState.{
|
|||
Normal,
|
||||
Preconnection
|
||||
}
|
||||
import org.slf4j.Logger
|
||||
|
||||
import scala.concurrent.Future
|
||||
|
||||
|
@ -42,6 +43,11 @@ class PeerMessageReceiver(
|
|||
extends P2PLogger {
|
||||
import ref.dispatcher
|
||||
|
||||
// Need to overwrite logger because nodeAppConfig and chainAppConfig are both
|
||||
// instances of LoggerConfig
|
||||
protected def logger(implicit config: NodeAppConfig): Logger =
|
||||
super.logger(config)
|
||||
|
||||
/** This method is called when we have received
|
||||
* a [[akka.io.Tcp.Connected]] message from our peer
|
||||
* This means we have opened a Tcp connection,
|
||||
|
|
|
@ -3,6 +3,9 @@ bitcoin-s {
|
|||
network = regtest # regtest, testnet3, mainnet
|
||||
|
||||
logging {
|
||||
# Ignore bitcoin-s logging config and use a logback config
|
||||
logback = true
|
||||
|
||||
level = WARN # trace, debug, info, warn, error, off
|
||||
|
||||
# You can also tune specific module loggers.
|
||||
|
|
|
@ -226,7 +226,8 @@ object NodeUnitTest extends P2PLogger {
|
|||
nodeConnectedWithBitcoind: NodeConnectedWithBitcoind)(
|
||||
implicit system: ActorSystem,
|
||||
appConfig: BitcoinSAppConfig): Future[Unit] = {
|
||||
logger.debug(s"Beggining tear down of node connected with bitcoind")
|
||||
logger(appConfig.nodeConf)
|
||||
.debug(s"Beggining tear down of node connected with bitcoind")
|
||||
import system.dispatcher
|
||||
val node = nodeConnectedWithBitcoind.node
|
||||
val bitcoind = nodeConnectedWithBitcoind.bitcoind
|
||||
|
@ -234,7 +235,8 @@ object NodeUnitTest extends P2PLogger {
|
|||
_ <- destroyNode(node)
|
||||
_ <- ChainUnitTest.destroyBitcoind(bitcoind)
|
||||
} yield {
|
||||
logger.debug(s"Done with teardown of node connected with bitcoind!")
|
||||
logger(appConfig.nodeConf)
|
||||
.debug(s"Done with teardown of node connected with bitcoind!")
|
||||
()
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,9 @@ import scala.util.Properties
|
|||
class WalletAppConfigTest extends BitcoinSAsyncTest {
|
||||
|
||||
val tempDir = Files.createTempDirectory("bitcoin-s")
|
||||
val config = WalletAppConfig(directory = tempDir)
|
||||
|
||||
val config: WalletAppConfig =
|
||||
WalletAppConfig(directory = tempDir, useLogbackConf = false)
|
||||
|
||||
it must "resolve DB connections correctly " in {
|
||||
assert(config.dbPath.startsWith(Properties.tmpDir))
|
||||
|
@ -46,7 +48,8 @@ class WalletAppConfigTest extends BitcoinSAsyncTest {
|
|||
|}
|
||||
|""".stripMargin)
|
||||
|
||||
val throughConstuctor = WalletAppConfig(tempDir, overrider)
|
||||
val throughConstuctor =
|
||||
WalletAppConfig(tempDir, useLogbackConf = false, overrider)
|
||||
val throughWithOverrides = config.withOverrides(overrider)
|
||||
assert(throughWithOverrides.network == MainNet)
|
||||
assert(throughWithOverrides.network == throughConstuctor.network)
|
||||
|
@ -97,7 +100,7 @@ class WalletAppConfigTest extends BitcoinSAsyncTest {
|
|||
""".stripMargin
|
||||
val _ = Files.write(tempFile, confStr.getBytes())
|
||||
|
||||
val appConfig = WalletAppConfig(directory = tempDir)
|
||||
val appConfig = WalletAppConfig(directory = tempDir, useLogbackConf = false)
|
||||
|
||||
assert(appConfig.datadir == tempDir.resolve("testnet3"))
|
||||
assert(appConfig.network == TestNet3)
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package org.bitcoins.wallet
|
||||
|
||||
import org.bitcoins.wallet.config.WalletAppConfig
|
||||
import org.bitcoins.db.{AppLoggers, MarkedLogger}
|
||||
import org.bitcoins.db.{AppLoggers, LoggerConfig}
|
||||
import org.slf4j.Logger
|
||||
|
||||
/** Exposes acccess to the wallet logger */
|
||||
private[bitcoins] trait WalletLogger {
|
||||
private var _logger: MarkedLogger = _
|
||||
protected[bitcoins] def logger(implicit config: WalletAppConfig) = {
|
||||
private var _logger: Logger = _
|
||||
protected[bitcoins] def logger(implicit config: LoggerConfig): Logger = {
|
||||
if (_logger == null) {
|
||||
_logger = WalletLoggerImpl(config).getLogger
|
||||
}
|
||||
|
@ -14,12 +14,12 @@ private[bitcoins] trait WalletLogger {
|
|||
}
|
||||
}
|
||||
|
||||
private[wallet] case class WalletLoggerImpl(override val conf: WalletAppConfig)
|
||||
private[wallet] case class WalletLoggerImpl(override val conf: LoggerConfig)
|
||||
extends AppLoggers {
|
||||
|
||||
/**
|
||||
* @return the generic wallet logger (i.e. everything not related to key handling)
|
||||
*/
|
||||
def getLogger: MarkedLogger =
|
||||
def getLogger: Logger =
|
||||
getLoggerImpl(LoggerKind.Wallet)
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import scala.concurrent.{ExecutionContext, Future}
|
|||
*/
|
||||
case class WalletAppConfig(
|
||||
private val directory: Path,
|
||||
override val useLogbackConf: Boolean,
|
||||
private val conf: Config*)(implicit override val ec: ExecutionContext)
|
||||
extends AppConfig
|
||||
with WalletDbManagement
|
||||
|
@ -28,7 +29,7 @@ case class WalletAppConfig(
|
|||
override protected[bitcoins] type ConfigType = WalletAppConfig
|
||||
override protected[bitcoins] def newConfigOfType(
|
||||
configs: Seq[Config]): WalletAppConfig =
|
||||
WalletAppConfig(directory, configs: _*)
|
||||
WalletAppConfig(directory, useLogbackConf, configs: _*)
|
||||
|
||||
protected[bitcoins] def baseDatadir: Path = directory
|
||||
|
||||
|
@ -131,7 +132,9 @@ object WalletAppConfig {
|
|||
/** Constructs a wallet configuration from the default Bitcoin-S
|
||||
* data directory and given list of configuration overrides.
|
||||
*/
|
||||
def fromDefaultDatadir(confs: Config*)(
|
||||
def fromDefaultDatadir(useLogbackConf: Boolean, confs: Config*)(
|
||||
implicit ec: ExecutionContext): WalletAppConfig =
|
||||
WalletAppConfig(AppConfig.DEFAULT_BITCOIN_S_DATADIR, confs: _*)
|
||||
WalletAppConfig(AppConfig.DEFAULT_BITCOIN_S_DATADIR,
|
||||
useLogbackConf,
|
||||
confs: _*)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue