Skip to content
This repository was archived by the owner on Mar 27, 2025. It is now read-only.

Commit bee7632

Browse files
authored
Add logging of main actor messages (#110)
* Change Linearized code subfolder * Add logging of SudokuSolver and SudokuProgressTracker messages * Bump sbt from 1.8.3 to 1.9.3 * Change name of log file to sudoku.log
1 parent cf2e510 commit bee7632

File tree

99 files changed

+1087
-590
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+1087
-590
lines changed

Diff for: course-management.conf

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ cmt {
55
# Folder in studentified repo holding the current exercise code
66
studentified-repo-active-exercise-folder = .
77

8+
# Folder in linearized repo holding the current exercise code
9+
linearized-repo-active-exercise-folder = code
10+
811
# List of folders containing test code
912
test-code-folders = [
1013
"src/test"
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
21
Global / onChangedBuildSource := ReloadOnSourceChanges
32

4-
53
lazy val `moving-from-scala-2-to-scala-3` =
64
(project in file(".")).settings(
75
scalaVersion := "2.13.10",
86
Compile / scalacOptions ++= CompileOptions.compileOptions,
97
libraryDependencies ++= Dependencies.dependencies,
10-
testFrameworks += new TestFramework("munit.Framework"),
11-
)
8+
testFrameworks += new TestFramework("munit.Framework"))
129

1310
sbt.addCommandAlias("runSolver", "runMain org.lunatechlabs.dotty.SudokuSolverMain")

Diff for: exercises/exercise_000_sudoku_solver_initial_state/project/Build.scala

+13-24
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,31 @@ object CompileOptions {
77
lazy val rewriteNoIndent = Seq("-rewrite", "-noindent")
88
lazy val rewriteOldSyntax = Seq("-rewrite", "-old-syntax")
99

10-
lazy val compileOptions = Seq(
11-
"-unchecked",
12-
"-deprecation",
13-
"-encoding", "UTF-8",
14-
)
10+
lazy val compileOptions = Seq("-unchecked", "-deprecation", "-encoding", "UTF-8")
1511
}
1612

1713
object Versions {
18-
lazy val akkaVer = "2.6.20"
19-
lazy val logbackVer = "1.2.3"
20-
lazy val mUnitVer = "0.7.26"
14+
lazy val akkaVer = "2.6.20"
15+
lazy val logbackVer = "1.2.3"
16+
lazy val mUnitVer = "0.7.26"
2117
}
2218

2319
object Dependencies {
2420

2521
private lazy val akkaDeps = Seq(
26-
"com.typesafe.akka" %% "akka-actor-typed",
27-
"com.typesafe.akka" %% "akka-slf4j",
28-
"com.typesafe.akka" %% "akka-stream",
29-
).map (_ % Versions.akkaVer)
22+
"com.typesafe.akka" %% "akka-actor-typed",
23+
"com.typesafe.akka" %% "akka-slf4j",
24+
"com.typesafe.akka" %% "akka-stream").map(_ % Versions.akkaVer)
3025

31-
private lazy val akkaTestkitDeps = Seq(
32-
"com.typesafe.akka" %% "akka-actor-testkit-typed" % Versions.akkaVer % Test
33-
)
26+
private lazy val akkaTestkitDeps = Seq("com.typesafe.akka" %% "akka-actor-testkit-typed" % Versions.akkaVer % Test)
3427

35-
private lazy val logbackDeps = Seq (
36-
"ch.qos.logback" % "logback-classic",
37-
).map (_ % Versions.logbackVer)
28+
private lazy val logbackDeps = Seq("ch.qos.logback" % "logback-classic").map(_ % Versions.logbackVer)
3829

39-
private lazy val munitDeps = Seq(
40-
"org.scalameta" %% "munit" % Versions.mUnitVer % Test
41-
)
30+
private lazy val munitDeps = Seq("org.scalameta" %% "munit" % Versions.mUnitVer % Test)
4231

4332
lazy val dependencies: Seq[ModuleID] =
4433
logbackDeps ++
45-
munitDeps ++
46-
akkaDeps ++
47-
akkaTestkitDeps
34+
munitDeps ++
35+
akkaDeps ++
36+
akkaTestkitDeps
4837
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.8.3
1+
sbt.version=1.9.3

Diff for: exercises/exercise_000_sudoku_solver_initial_state/src/main/resources/application.conf

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
akka {
2+
loggers = ["akka.event.slf4j.Slf4jLogger"]
3+
loglevel = "INFO"
4+
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
5+
26
log-dead-letters = on
37
logger-startup-timeout = 30s
48

Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
12
<configuration>
23

3-
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
4+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
45
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
5-
<level>info</level>
6+
<level>INFO</level>
67
</filter>
78
<encoder>
8-
<pattern>%date{HH:mm:ss} %-5level [%X{akkaSource}] - %msg%n</pattern>
9+
<pattern>[%date{ISO8601}] [%level] [%logger] [%marker] [%thread] - %msg %n</pattern>
910
</encoder>
1011
</appender>
1112

12-
<logger name="org.lunatechlabs.dotty" level="info" additivity="false">
13-
<appender-ref ref="console"/>
14-
</logger>
15-
16-
<logger name="akka.actor.RepointableActorRef" level="info" additivity="false">
17-
<appender-ref ref="console"/>
18-
</logger>
13+
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
14+
<file>target/sudoku.log</file>
15+
<encoder>
16+
<pattern>[%date{ISO8601}] [%level] [%logger] [%marker] [%thread] - %msg %n</pattern>
17+
</encoder>
18+
</appender>
1919

20-
<root level="info">
21-
<appender-ref ref="console"/>
20+
<root level="INFO">
21+
<appender-ref ref="STDOUT"/>
22+
<appender-ref ref="FILE"/>
2223
</root>
23-
2424
</configuration>

Diff for: exercises/exercise_000_sudoku_solver_initial_state/src/main/scala/org/lunatechlabs/dotty/sudoku/SudokuProgressTracker.scala

+2
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ class SudokuProgressTracker private (
3030
def trackProgress(updatesInFlight: Int): Behavior[Command] =
3131
Behaviors.receiveMessage {
3232
case NewUpdatesInFlight(updateCount) if updatesInFlight - 1 == 0 =>
33+
context.log.debug("NewUpdatesInFlight({}) - UpdatesInFlight={}", updateCount, updatesInFlight + updateCount)
3334
rowDetailProcessors.foreach { case (_, processor) =>
3435
processor ! SudokuDetailProcessor.GetSudokuDetailState(context.self)
3536
}
3637
collectEndState()
3738
case NewUpdatesInFlight(updateCount) =>
39+
context.log.debug("NewUpdatesInFlight({}) - UpdatesInFlight={}", updateCount, updatesInFlight + updateCount)
3840
trackProgress(updatesInFlight + updateCount)
3941
case msg: SudokuDetailState =>
4042
context.log.error("Received unexpected message in state 'trackProgress': {}", msg)

Diff for: exercises/exercise_000_sudoku_solver_initial_state/src/main/scala/org/lunatechlabs/dotty/sudoku/SudokuSolver.scala

+44
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class SudokuSolver private (context: ActorContext[SudokuSolver.Command], buffer:
7474
rowUpdates.foreach { case SudokuDetailProcessor.RowUpdate(row, cellUpdates) =>
7575
rowDetailProcessors(row) ! SudokuDetailProcessor.Update(cellUpdates, detailProcessorResponseMapper)
7676
}
77+
context.log.debug("InitialRowUpdates: {}", rowUpdates)
7778
progressTracker ! SudokuProgressTracker.NewUpdatesInFlight(rowUpdates.size)
7879
processRequest(Some(sender), System.currentTimeMillis())
7980
case unexpectedMsg =>
@@ -88,52 +89,95 @@ class SudokuSolver private (context: ActorContext[SudokuSolver.Command], buffer:
8889
response match {
8990
case SudokuDetailProcessor.RowUpdate(rowNr, updates) =>
9091
updates.foreach { case (rowCellNr, newCellContent) =>
92+
context.log.debug("Incoming update for Row({},{})={} ", rowNr, rowCellNr, newCellContent)
9193
val (columnNr, columnCellNr) = rowToColumnCoordinates(rowNr, rowCellNr)
9294
val columnUpdate = Vector(columnCellNr -> newCellContent)
95+
context.log.debug(
96+
"Outgoing update from RowProcessor({}) for Column({}, {})={} ",
97+
rowNr,
98+
columnNr,
99+
columnCellNr,
100+
columnUpdate)
93101
columnDetailProcessors(columnNr) ! SudokuDetailProcessor.Update(
94102
columnUpdate,
95103
detailProcessorResponseMapper)
96104

97105
val (blockNr, blockCellNr) = rowToBlockCoordinates(rowNr, rowCellNr)
98106
val blockUpdate = Vector(blockCellNr -> newCellContent)
107+
context.log.debug(
108+
"Outgoing update from RowProcessor({}) for Block({}, {})={} ",
109+
rowNr,
110+
blockNr,
111+
blockCellNr,
112+
blockUpdate)
99113
blockDetailProcessors(blockNr) ! SudokuDetailProcessor.Update(blockUpdate, detailProcessorResponseMapper)
100114
}
101115
progressTracker ! SudokuProgressTracker.NewUpdatesInFlight(2 * updates.size - 1)
102116
Behaviors.same
103117
case SudokuDetailProcessor.ColumnUpdate(columnNr, updates) =>
104118
updates.foreach { case (colCellNr, newCellContent) =>
119+
context.log.debug("Incoming update for Column({},{})={} ", columnNr, colCellNr, newCellContent)
105120
val (rowNr, rowCellNr) = columnToRowCoordinates(columnNr, colCellNr)
106121
val rowUpdate = Vector(rowCellNr -> newCellContent)
122+
context.log.debug(
123+
"Outgoing update from ColumnProcessor({}) for Row({}, {})={} ",
124+
columnNr,
125+
rowNr,
126+
rowCellNr,
127+
rowUpdate)
107128
rowDetailProcessors(rowNr) ! SudokuDetailProcessor.Update(rowUpdate, detailProcessorResponseMapper)
108129

109130
val (blockNr, blockCellNr) = columnToBlockCoordinates(columnNr, colCellNr)
110131
val blockUpdate = Vector(blockCellNr -> newCellContent)
132+
context.log.debug(
133+
"Outgoing update from ColumnProcessor({}) for Block({}, {})={} ",
134+
columnNr,
135+
blockNr,
136+
blockCellNr,
137+
blockUpdate)
111138
blockDetailProcessors(blockNr) ! SudokuDetailProcessor.Update(blockUpdate, detailProcessorResponseMapper)
112139
}
113140
progressTracker ! SudokuProgressTracker.NewUpdatesInFlight(2 * updates.size - 1)
114141
Behaviors.same
115142
case SudokuDetailProcessor.BlockUpdate(blockNr, updates) =>
116143
updates.foreach { case (blockCellNr, newCellContent) =>
144+
context.log.debug("Incoming update for Block({},{})={} ", blockNr, blockCellNr, newCellContent)
117145
val (rowNr, rowCellNr) = blockToRowCoordinates(blockNr, blockCellNr)
118146
val rowUpdate = Vector(rowCellNr -> newCellContent)
147+
context.log.debug(
148+
"Outgoing update from BlockProcessor({}) for Row({}, {})={} ",
149+
blockNr,
150+
rowNr,
151+
rowCellNr,
152+
rowUpdate)
153+
119154
rowDetailProcessors(rowNr) ! SudokuDetailProcessor.Update(rowUpdate, detailProcessorResponseMapper)
120155

121156
val (columnNr, columnCellNr) = blockToColumnCoordinates(blockNr, blockCellNr)
122157
val columnUpdate = Vector(columnCellNr -> newCellContent)
158+
context.log.debug(
159+
"Outgoing update from BlockProcessor({}) for Column({}, {})={} ",
160+
blockNr,
161+
columnNr,
162+
columnCellNr,
163+
columnUpdate)
164+
123165
columnDetailProcessors(columnNr) ! SudokuDetailProcessor.Update(
124166
columnUpdate,
125167
detailProcessorResponseMapper)
126168
}
127169
progressTracker ! SudokuProgressTracker.NewUpdatesInFlight(2 * updates.size - 1)
128170
Behaviors.same
129171
case unchanged @ SudokuDetailProcessor.SudokuDetailUnchanged =>
172+
context.log.debug("SudokuDetailUnchanged")
130173
progressTracker ! SudokuProgressTracker.NewUpdatesInFlight(-1)
131174
Behaviors.same
132175
}
133176
case SudokuProgressTrackerResponseWrapped(result) =>
134177
result match {
135178
case SudokuProgressTracker.Result(sudoku) =>
136179
context.log.info(s"Sudoku processing time: ${System.currentTimeMillis() - startTime} milliseconds")
180+
context.log.debug("Result: {}", sudoku)
137181
requestor.get ! SudokuSolution(sudoku)
138182
resetAllDetailProcessors()
139183
buffer.unstashAll(idle())
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
Global / onChangedBuildSource := ReloadOnSourceChanges
22

3-
43
lazy val `moving-from-scala-2-to-scala-3` =
54
(project in file(".")).settings(
65
scalaVersion := "3.3.0",
76
Compile / scalacOptions ++= CompileOptions.compileOptions,
87
libraryDependencies ++= Dependencies.dependencies,
9-
testFrameworks += new TestFramework("munit.Framework"),
10-
)
8+
testFrameworks += new TestFramework("munit.Framework"))
119

1210
sbt.addCommandAlias("runSolver", "runMain org.lunatechlabs.dotty.SudokuSolverMain")

Diff for: exercises/exercise_001_dotty_deprecated_syntax_rewriting/project/Build.scala

+13-25
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,31 @@ object CompileOptions {
77
lazy val rewriteNoIndent = Seq("-rewrite", "-noindent")
88
lazy val rewriteOldSyntax = Seq("-rewrite", "-old-syntax")
99

10-
lazy val compileOptions = Seq(
11-
"-unchecked",
12-
"-deprecation",
13-
"-encoding", "UTF-8",
14-
"-source:future-migration",
15-
)
10+
lazy val compileOptions = Seq("-unchecked", "-deprecation", "-encoding", "UTF-8", "-source:future-migration")
1611
}
1712

1813
object Versions {
19-
lazy val akkaVer = "2.6.20"
20-
lazy val logbackVer = "1.2.3"
21-
lazy val mUnitVer = "0.7.26"
14+
lazy val akkaVer = "2.6.20"
15+
lazy val logbackVer = "1.2.3"
16+
lazy val mUnitVer = "0.7.26"
2217
}
2318

2419
object Dependencies {
2520

2621
private lazy val akkaDeps = Seq(
27-
"com.typesafe.akka" %% "akka-actor-typed",
28-
"com.typesafe.akka" %% "akka-slf4j",
29-
"com.typesafe.akka" %% "akka-stream",
30-
).map (_ % Versions.akkaVer)
22+
"com.typesafe.akka" %% "akka-actor-typed",
23+
"com.typesafe.akka" %% "akka-slf4j",
24+
"com.typesafe.akka" %% "akka-stream").map(_ % Versions.akkaVer)
3125

32-
private lazy val akkaTestkitDeps = Seq(
33-
"com.typesafe.akka" %% "akka-actor-testkit-typed" % Versions.akkaVer % Test
34-
)
26+
private lazy val akkaTestkitDeps = Seq("com.typesafe.akka" %% "akka-actor-testkit-typed" % Versions.akkaVer % Test)
3527

36-
private lazy val logbackDeps = Seq (
37-
"ch.qos.logback" % "logback-classic",
38-
).map (_ % Versions.logbackVer)
28+
private lazy val logbackDeps = Seq("ch.qos.logback" % "logback-classic").map(_ % Versions.logbackVer)
3929

40-
private lazy val munitDeps = Seq(
41-
"org.scalameta" %% "munit" % Versions.mUnitVer % Test
42-
)
30+
private lazy val munitDeps = Seq("org.scalameta" %% "munit" % Versions.mUnitVer % Test)
4331

4432
lazy val dependencies: Seq[ModuleID] =
4533
logbackDeps ++
46-
munitDeps ++
47-
akkaDeps ++
48-
akkaTestkitDeps
34+
munitDeps ++
35+
akkaDeps ++
36+
akkaTestkitDeps
4937
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.8.3
1+
sbt.version=1.9.3

Diff for: exercises/exercise_001_dotty_deprecated_syntax_rewriting/src/main/resources/application.conf

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
akka {
2+
loggers = ["akka.event.slf4j.Slf4jLogger"]
3+
loglevel = "INFO"
4+
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
5+
26
log-dead-letters = on
37
logger-startup-timeout = 30s
48

Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
12
<configuration>
23

3-
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
4+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
45
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
5-
<level>info</level>
6+
<level>INFO</level>
67
</filter>
78
<encoder>
8-
<pattern>%date{HH:mm:ss} %-5level [%X{akkaSource}] - %msg%n</pattern>
9+
<pattern>[%date{ISO8601}] [%level] [%logger] [%marker] [%thread] - %msg %n</pattern>
910
</encoder>
1011
</appender>
1112

12-
<logger name="org.lunatechlabs.dotty" level="info" additivity="false">
13-
<appender-ref ref="console"/>
14-
</logger>
15-
16-
<logger name="akka.actor.RepointableActorRef" level="info" additivity="false">
17-
<appender-ref ref="console"/>
18-
</logger>
13+
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
14+
<file>target/sudoku.log</file>
15+
<encoder>
16+
<pattern>[%date{ISO8601}] [%level] [%logger] [%marker] [%thread] - %msg %n</pattern>
17+
</encoder>
18+
</appender>
1919

20-
<root level="info">
21-
<appender-ref ref="console"/>
20+
<root level="INFO">
21+
<appender-ref ref="STDOUT"/>
22+
<appender-ref ref="FILE"/>
2223
</root>
23-
2424
</configuration>

Diff for: exercises/exercise_001_dotty_deprecated_syntax_rewriting/src/main/scala/org/lunatechlabs/dotty/sudoku/SudokuProgressTracker.scala

+2
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ class SudokuProgressTracker private (
3030
def trackProgress(updatesInFlight: Int): Behavior[Command] =
3131
Behaviors.receiveMessage {
3232
case NewUpdatesInFlight(updateCount) if updatesInFlight - 1 == 0 =>
33+
context.log.debug("NewUpdatesInFlight({}) - UpdatesInFlight={}", updateCount, updatesInFlight + updateCount)
3334
rowDetailProcessors.foreach { case (_, processor) =>
3435
processor ! SudokuDetailProcessor.GetSudokuDetailState(context.self)
3536
}
3637
collectEndState()
3738
case NewUpdatesInFlight(updateCount) =>
39+
context.log.debug("NewUpdatesInFlight({}) - UpdatesInFlight={}", updateCount, updatesInFlight + updateCount)
3840
trackProgress(updatesInFlight + updateCount)
3941
case msg: SudokuDetailState =>
4042
context.log.error("Received unexpected message in state 'trackProgress': {}", msg)

0 commit comments

Comments
 (0)