Skip to content

Commit 88ef85d

Browse files
committed
switch to using slog for hades logging
1 parent b6c929e commit 88ef85d

4 files changed

Lines changed: 25 additions & 34 deletions

File tree

cmd/daemon/daemon.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package daemon
33
import (
44
"context"
55
"log"
6+
"log/slog"
67
"net"
78
"os"
89
"path/filepath"
@@ -14,6 +15,7 @@ import (
1415
"github.com/google/uuid"
1516
"github.com/itchio/butler/butlerd"
1617
"github.com/itchio/butler/database"
18+
"github.com/itchio/butler/database/models"
1719
"github.com/itchio/headway/state"
1820

1921
"github.com/itchio/butler/comm"
@@ -118,6 +120,14 @@ func Do(mansionContext *mansion.Context, ctx context.Context, dbPool *sqlitex.Po
118120
s := butlerd.NewServer(secret)
119121
router := GetRouter(dbPool, mansionContext)
120122

123+
// For daemon mode, keep SQL debug logs on stderr as structured JSON, so they
124+
// can be parsed without interfering with protocol data on stdout/stdio transport.
125+
if models.LogSql {
126+
models.SetHadesLogger(slog.New(slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{
127+
Level: slog.LevelDebug,
128+
})))
129+
}
130+
121131
switch args.transport {
122132
case "tcp":
123133
listener, err := net.Listen("tcp", "127.0.0.1:")

database/models/utils.go

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,37 @@
11
package models
22

33
import (
4-
"log"
4+
"log/slog"
55
"os"
66
"time"
77

88
"crawshaw.io/sqlite"
99
"github.com/itchio/hades"
10-
"github.com/itchio/headway/state"
1110
"xorm.io/builder"
1211
)
1312

14-
var dbConsumer *state.Consumer
15-
var logSql = os.Getenv("BUTLER_SQL_DEBUG") == "1"
16-
17-
func init() {
18-
dbConsumer = &state.Consumer{}
19-
if logSql {
20-
dbConsumer.OnMessage = func(lvl string, message string) {
21-
log.Printf("[hades] [%s] %s", lvl, message)
22-
}
23-
}
24-
}
13+
var LogSql = os.Getenv("BUTLER_SQL_DEBUG") == "1"
2514

2615
var hadesContext *hades.Context
2716

2817
func HadesContext() *hades.Context {
2918
if hadesContext == nil {
3019
var err error
31-
hadesContext, err = hades.NewContext(dbConsumer, AllModels...)
32-
hadesContext.Log = logSql
20+
hadesContext, err = hades.NewContext(AllModels...)
21+
if LogSql {
22+
hadesContext.Logger = slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelDebug}))
23+
}
3324
Must(err)
3425
}
3526
return hadesContext
3627
}
3728

29+
// SetHadesLogger sets a custom slog.Logger on the hades context.
30+
// Call this before any database operations to override the default stderr text logger.
31+
func SetHadesLogger(logger *slog.Logger) {
32+
HadesContext().Logger = logger
33+
}
34+
3835
func Must(err error) {
3936
if err != nil {
4037
panic(err)

go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ require (
2121
github.com/itchio/dash v0.0.0-20260128225838-1643ccf89aea
2222
github.com/itchio/elefant v0.0.0-20200305193251-d52333c6ec90
2323
github.com/itchio/go-itchio v0.0.0-20251229221754-554b6b9748f0
24-
github.com/itchio/hades v0.0.0-20260210234829-d62f958c1445
24+
github.com/itchio/hades v0.0.0-20260219080741-55750b20dd32
2525
github.com/itchio/headway v0.0.0-20251229214354-da882c8b5dd4
2626
github.com/itchio/httpkit v0.0.0-20260213231528-25109ada88c9
2727
github.com/itchio/hush v0.0.0-20260123230201-fb8be8976347
@@ -93,8 +93,6 @@ require (
9393
github.com/mattn/go-colorable v0.1.14 // indirect
9494
github.com/mattn/go-isatty v0.0.20 // indirect
9595
github.com/mattn/go-runewidth v0.0.19 // indirect
96-
github.com/mitchellh/copystructure v1.2.0 // indirect
97-
github.com/mitchellh/reflectwalk v1.0.2 // indirect
9896
github.com/nightlyone/lockfile v1.0.0 // indirect
9997
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect
10098
github.com/pmezard/go-difflib v1.0.0 // indirect

go.sum

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797 h1:yDf7ARQc637HoxDho7xjqdvO5ZA2Yb+xzv/fOnnvZzw=
22
crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797/go.mod h1:sXBiorCo8c46JlQV3oXPKINnZ8mcqnye1EkVkqsectk=
3-
crawshaw.io/sqlite v0.2.5/go.mod h1:igAO5JulrQ1DbdZdtVq48mnZUBAPOeFzer7VhDWNtW4=
43
crawshaw.io/sqlite v0.3.2 h1:N6IzTjkiw9FItHAa0jp+ZKC6tuLzXqAYIv+ccIWos1I=
54
crawshaw.io/sqlite v0.3.2/go.mod h1:igAO5JulrQ1DbdZdtVq48mnZUBAPOeFzer7VhDWNtW4=
65
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
@@ -99,7 +98,6 @@ github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6m
9998
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
10099
github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw=
101100
github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4=
102-
github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM=
103101
github.com/gogs/chardet v0.0.0-20191104214054-4b6791f73a28/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14=
104102
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f h1:3BSP1Tbs2djlpprl7wCLuiqMaUh5SJkkzI2gDs+FgLs=
105103
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14=
@@ -141,10 +139,8 @@ github.com/itchio/go-brotli v0.0.0-20190702114328-3f28d645a45c h1:Jf20xV/yR/O6eS
141139
github.com/itchio/go-brotli v0.0.0-20190702114328-3f28d645a45c/go.mod h1:oRXh43p/JW9kWosasd+2kHfDpb1ec4m7YrZ5E39s1iI=
142140
github.com/itchio/go-itchio v0.0.0-20251229221754-554b6b9748f0 h1:YQ13L7jHFyLiYsx+02w0idXNK9xrSEFTtVVOyXqpcdE=
143141
github.com/itchio/go-itchio v0.0.0-20251229221754-554b6b9748f0/go.mod h1:q3pbo9hFXuq1Ck7t71v5hTOfgWylxJJ8kibX3CxsiiQ=
144-
github.com/itchio/hades v0.0.0-20200218173536-5021c7c6d6e4 h1:gSA/VsLRFVpNsEbgAdugcG6+wKLfJQu1yqLiwRdxTQI=
145-
github.com/itchio/hades v0.0.0-20200218173536-5021c7c6d6e4/go.mod h1:sQqNZysbPmPulFOtaNU/50b6gMLPvuQfrp6x6HIo8c8=
146-
github.com/itchio/hades v0.0.0-20260210234829-d62f958c1445 h1:FoUg8WFu84vj75HWKkG3RIUmcPxRK8q/bMNYOTcrb4k=
147-
github.com/itchio/hades v0.0.0-20260210234829-d62f958c1445/go.mod h1:7vRmj12Rs6rf66+UZOvMKDvTMVVfL4TPdJgqPhXzOlw=
142+
github.com/itchio/hades v0.0.0-20260219080741-55750b20dd32 h1:8pkirHFVeAJ+N5BzMybQbBw0FTezAtUAj9aDmnLWEc8=
143+
github.com/itchio/hades v0.0.0-20260219080741-55750b20dd32/go.mod h1:0AdJ5AtSRdWSqUyywmadiL/YLF9TunxPOutRzeA4IqA=
148144
github.com/itchio/headway v0.0.0-20190702175331-a4c65c5306de/go.mod h1:Iif+7HeesRB0PvTYf0gOIFX8lj0za0SUsWryENQYt1E=
149145
github.com/itchio/headway v0.0.0-20191015112415-46f64dd4d524/go.mod h1:Iif+7HeesRB0PvTYf0gOIFX8lj0za0SUsWryENQYt1E=
150146
github.com/itchio/headway v0.0.0-20200301160421-e15721f23905/go.mod h1:JpKeIqKW8xveb2juFrZ2kFR8GiMplC2H6bZ+UZHC/c0=
@@ -159,7 +155,6 @@ github.com/itchio/intact v0.0.0-20200301161822-f8c4a3336c2a h1:lTvuTme0PqU2gIzNK
159155
github.com/itchio/intact v0.0.0-20200301161822-f8c4a3336c2a/go.mod h1:63w5zpLrbzfhdIWsEkVs+iyfQquaf6KNQTSpaAubtDc=
160156
github.com/itchio/kompress v0.0.0-20200301155538-5c2eecce9e51 h1:jipXtdsZClshNO8fKK8ItiVyqE9bKA09as+qjW/yjG0=
161157
github.com/itchio/kompress v0.0.0-20200301155538-5c2eecce9e51/go.mod h1:iLS+Eq+S26jTC4pbdDH6N5XtDqrjb4IOXtjj1HCzbuk=
162-
github.com/itchio/lake v0.0.0-20200305150023-cc4284ec2b2a h1:wiwopNWPhAzU5qnXW6vcn06Zd/bpXBdre1XNrXDjy5I=
163158
github.com/itchio/lake v0.0.0-20200305150023-cc4284ec2b2a/go.mod h1:yF1QEd82Erd4OseK1riuaowmTZBPt/Xx+Y/zixJguKc=
164159
github.com/itchio/lake v0.0.0-20260214042742-d93a9d33bb65 h1:cE8T4mvglhWfWhu8tRVf0BSVCa8wfvNtXV/X7p4vzbw=
165160
github.com/itchio/lake v0.0.0-20260214042742-d93a9d33bb65/go.mod h1:9Zf8jYiKUDob8J+VH2YdLjf63qoL8Ox5lNBf5amM4w4=
@@ -173,14 +168,12 @@ github.com/itchio/ox v0.0.0-20260212201121-1e6be0bfd382 h1:FKGDIamOblBuLCYDxJkGE
173168
github.com/itchio/ox v0.0.0-20260212201121-1e6be0bfd382/go.mod h1:433sW0ck7/e5u7yycn9pmuK84/askPuhm3MqtwFl9zk=
174169
github.com/itchio/pelican v0.0.0-20200626221820-739b3d7708d2 h1:XrbJuHHAiZ1YEWXjNM+2vWBWZfxxSu66LLOQ5WoYd88=
175170
github.com/itchio/pelican v0.0.0-20200626221820-739b3d7708d2/go.mod h1:yO1VTrLzhasSPQrOvDpfZnkAmNVD6Cv+pbF6hTsWSpM=
176-
github.com/itchio/randsource v0.0.0-20190703104731-3f6d22f91927 h1:5abFAYun3PFycBSXZnvXk0wqaPNiioSTIOZFf3I0J+A=
177171
github.com/itchio/randsource v0.0.0-20190703104731-3f6d22f91927/go.mod h1:lKWkyaS6DHSVoxVLw7mIeD+po2Kvwv1Hiy8+7VR1zZc=
178172
github.com/itchio/randsource v0.0.0-20260216215536-1b48147d46e5 h1:RWifjgxRQRPdICcmunL8C+F4T3FaXMcOH6SLXGOBEvE=
179173
github.com/itchio/randsource v0.0.0-20260216215536-1b48147d46e5/go.mod h1:u/BSnIaqgNRxmb4E/C+laDqg2SLsYCGEAL2d1yAsl1E=
180174
github.com/itchio/savior v0.0.0-20200301160120-c73741a23f8b/go.mod h1:GpmxUXrnJ4hMcKGkwsZJHcDy3XTmOkha6yrp7M/SHS0=
181175
github.com/itchio/savior v0.0.0-20260128212141-556ab9757054 h1:2i4ywwRfk0jt+10HbOa4S9JpK/IZyNOgZmlVBRspecg=
182176
github.com/itchio/savior v0.0.0-20260128212141-556ab9757054/go.mod h1:8EmhrNePUgdrnI8bKrsMdk71qv7+TcFQLxcbxlF9VlE=
183-
github.com/itchio/screw v0.0.0-20200301160148-75fc2d65fb38 h1:Mn30eeqfaJDXRxiQzHrh0BLtHVaMgU39xZtpwmoKss8=
184177
github.com/itchio/screw v0.0.0-20200301160148-75fc2d65fb38/go.mod h1:niqRh/zemDC1HOJiMwUHIsmbgw4t3NTAogGD53Uleqs=
185178
github.com/itchio/screw v0.0.0-20260217205324-77dbfa8b7bd3 h1:dBi+7uW40wOmVU2kCW6O5m/+mgwap8UMcJmkZVTXWiY=
186179
github.com/itchio/screw v0.0.0-20260217205324-77dbfa8b7bd3/go.mod h1:YwbHHVRIS/rkm1kHtab0wnYLWxiJXUdvr4oOYlv1dOA=
@@ -222,14 +215,10 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m
222215
github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
223216
github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
224217
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
225-
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
226-
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
227218
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
228219
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
229220
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
230221
github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
231-
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
232-
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
233222
github.com/natefinch/npipe v0.0.0-20160621034901-c1b8fa8bdcce h1:TqjP/BTDrwN7zP9xyXVuLsMBXYMt6LLYi55PlrIcq8U=
234223
github.com/natefinch/npipe v0.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:ifHPsLndGGzvgzcaXUvzmt6LxKT4pJ+uzEhtnMt+f7A=
235224
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
@@ -313,8 +302,6 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
313302
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
314303
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
315304
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
316-
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
317-
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
318305
golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
319306
golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
320307
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -352,6 +339,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
352339
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
353340
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
354341
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
355-
xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU=
356342
xorm.io/builder v0.3.7 h1:2pETdKRK+2QG4mLX4oODHEhn5Z8j1m8sXa7jfu+/SZI=
357343
xorm.io/builder v0.3.7/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=

0 commit comments

Comments
 (0)