Skip to content

Commit e48f35c

Browse files
authored
feat: refactor logger to standard library (#280)
* refactor: Refactor logging to use structured slog package. - Remove `gookit` dependencies from `go.sum` - Improve error logging in multiple packages by replacing `log` with `log/slog` - Update dependencies in `go.mod` - Add new `logger` package with test cases - Refactor logging statements in multiple packages to use `slog` instead of `log` - Change logging format and level in multiple packages for better structured logging * refactor: Refactor logger package and add handler interface - Refactor logger package - Rename `defaultHandler` to `DefaultLogger` - Move `ReplaceAttr` function to `Logger` struct - Implement `LogHandler` struct with `slog.Handler` interface - Add new `Logger` methods for configuration - Add `SetMaxLevel`, `SetJSONHandler`, `SetTextHandler`, `SetOutput`, `SetVerbose`, `SetReplaceAttrFunc` - Add verbose flag to `cmd/hack-browser-data/main.go` to increase logging * refactor: Refactor logger package to use simplified handler initialization. - Refactor logger package to use Default instead of DefaultLogger - Update `NewHandler` method to correctly reference `Default` logger and simplify handler initialization - Update tests for logger to reflect changes in Default usage - Rename `DefaultLogger` to `Default` and update comments to better reflect its purpose - Update function calls in hack-browser-data main.go to reflect logger package updates * refactor: Refactor logging in Chromium implementation Refactor logging and simplify decryption in chromium files - Replace logger package import with shared slog package - Change logging messages to use slog instead of logger - Simplify decryption process by removing first 5 characters of encrypted key - Refactor error logging in linux file to use shared slog package - Replace string concatenation with formatted string in linux error message
1 parent 23037e1 commit e48f35c

23 files changed

Lines changed: 312 additions & 209 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
# HackBrowserData
77

8-
[![Lint](https://github.com/moonD4rk/HackBrowserData/actions/workflows/lint.yml/badge.svg)](https://github.com/moonD4rk/HackBrowserData/actions/workflows/lint.yml) [![build](https://github.com/moonD4rk/HackBrowserData/actions/workflows/build.yml/badge.svg)](https://github.com/moonD4rk/HackBrowserData/actions/workflows/build.yml) [![Release](https://github.com/moonD4rk/HackBrowserData/actions/workflows/release.yml/badge.svg)](https://github.com/moonD4rk/HackBrowserData/actions/workflows/release.yml) [![run tests](https://github.com/moonD4rk/HackBrowserData/actions/workflows/unittest.yml/badge.svg)](https://github.com/moonD4rk/HackBrowserData/actions/workflows/unittest.yml) [![Coverage Status](https://coveralls.io/repos/github/moonD4rk/HackBrowserData/badge.svg)](https://coveralls.io/github/moonD4rk/HackBrowserData)
8+
[![Lint](https://github.com/moonD4rk/HackBrowserData/actions/workflows/lint.yml/badge.svg)](https://github.com/moonD4rk/HackBrowserData/actions/workflows/lint.yml) [![build](https://github.com/moonD4rk/HackBrowserData/actions/workflows/build.yml/badge.svg)](https://github.com/moonD4rk/HackBrowserData/actions/workflows/build.yml) [![Release](https://github.com/moonD4rk/HackBrowserData/actions/workflows/release.yml/badge.svg)](https://github.com/moonD4rk/HackBrowserData/actions/workflows/release.yml) [![unit tests](https://github.com/moonD4rk/HackBrowserData/actions/workflows/unittest.yml/badge.svg)](https://github.com/moonD4rk/HackBrowserData/actions/workflows/unittest.yml) [![Coverage Status](https://coveralls.io/repos/github/moonD4rk/HackBrowserData/badge.svg?branch=main)](https://coveralls.io/github/moonD4rk/HackBrowserData?branch=main)
99

1010
[中文说明](https://github.com/moonD4rk/HackBrowserData/blob/master/README_ZH.md)
1111

@@ -90,7 +90,7 @@ Installation of `HackBrowserData` is dead-simple, just download [the release for
9090
9191
### Building from source
9292

93-
only support `go 1.18+` with go generics
93+
only support `go 1.21+` with go generics and log/slog standard library.
9494

9595
```bash
9696
$ git clone https://github.com/moonD4rk/HackBrowserData

browser/browser.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package browser
22

33
import (
4+
"log/slog"
45
"path/filepath"
56
"sort"
67
"strings"
78

89
"github.com/moond4rk/hackbrowserdata/browser/chromium"
910
"github.com/moond4rk/hackbrowserdata/browser/firefox"
1011
"github.com/moond4rk/hackbrowserdata/browsingdata"
11-
"github.com/moond4rk/hackbrowserdata/log"
1212
"github.com/moond4rk/hackbrowserdata/utils/fileutil"
1313
"github.com/moond4rk/hackbrowserdata/utils/typeutil"
1414
)
@@ -44,16 +44,16 @@ func pickChromium(name, profile string) []Browser {
4444
if name == "all" {
4545
for _, v := range chromiumList {
4646
if !fileutil.IsDirExists(filepath.Clean(v.profilePath)) {
47-
log.Noticef("find browser %s failed, profile folder does not exist", v.name)
47+
slog.Warn("find browser failed, profile folder does not exist", "browser", v.name)
4848
continue
4949
}
5050
multiChromium, err := chromium.New(v.name, v.storage, v.profilePath, v.items)
5151
if err != nil {
52-
log.Errorf("new chromium error: %v", err)
52+
slog.Error("new chromium error", "err", err)
5353
continue
5454
}
5555
for _, b := range multiChromium {
56-
log.Noticef("find browser %s success", b.Name())
56+
slog.Warn("find browser success", "browser", b.Name())
5757
browsers = append(browsers, b)
5858
}
5959
}
@@ -63,14 +63,14 @@ func pickChromium(name, profile string) []Browser {
6363
profile = c.profilePath
6464
}
6565
if !fileutil.IsDirExists(filepath.Clean(profile)) {
66-
log.Fatalf("find browser %s failed, profile folder does not exist", c.name)
66+
slog.Error("find browser failed, profile folder does not exist", "browser", c.name)
6767
}
6868
chromiumList, err := chromium.New(c.name, c.storage, profile, c.items)
6969
if err != nil {
70-
log.Fatalf("new chromium error: %s", err)
70+
slog.Error("new chromium error", "err", err)
7171
}
7272
for _, b := range chromiumList {
73-
log.Noticef("find browser %s success", b.Name())
73+
slog.Warn("find browser success", "browser", b.Name())
7474
browsers = append(browsers, b)
7575
}
7676
}
@@ -89,17 +89,17 @@ func pickFirefox(name, profile string) []Browser {
8989
}
9090

9191
if !fileutil.IsDirExists(filepath.Clean(profile)) {
92-
log.Noticef("find browser firefox %s failed, profile folder does not exist", v.name)
92+
slog.Warn("find browser failed, profile folder does not exist", "browser", v.name)
9393
continue
9494
}
9595

9696
if multiFirefox, err := firefox.New(profile, v.items); err == nil {
9797
for _, b := range multiFirefox {
98-
log.Noticef("find browser firefox %s success", b.Name())
98+
slog.Warn("find browser success", "browser", b.Name())
9999
browsers = append(browsers, b)
100100
}
101101
} else {
102-
log.Error(err)
102+
slog.Error("new firefox error", "err", err)
103103
}
104104
}
105105

browser/chromium/chromium.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package chromium
22

33
import (
44
"io/fs"
5+
"log/slog"
56
"path/filepath"
67
"strings"
78

89
"github.com/moond4rk/hackbrowserdata/browsingdata"
910
"github.com/moond4rk/hackbrowserdata/item"
10-
"github.com/moond4rk/hackbrowserdata/log"
1111
"github.com/moond4rk/hackbrowserdata/utils/fileutil"
1212
"github.com/moond4rk/hackbrowserdata/utils/typeutil"
1313
)
@@ -90,7 +90,7 @@ func (c *Chromium) copyItemToLocal() error {
9090
err = fileutil.CopyFile(path, filename)
9191
}
9292
if err != nil {
93-
log.Errorf("copy %s to %s error: %v", path, filename, err)
93+
slog.Error("copy item to local error", "path", path, "filename", filename, "err", err)
9494
continue
9595
}
9696
}

browser/chromium/chromium_darwin.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import (
77
"crypto/sha1"
88
"errors"
99
"fmt"
10+
"log/slog"
1011
"os"
1112
"os/exec"
1213
"strings"
1314

1415
"golang.org/x/crypto/pbkdf2"
1516

1617
"github.com/moond4rk/hackbrowserdata/item"
17-
"github.com/moond4rk/hackbrowserdata/log"
1818
)
1919

2020
var (
@@ -55,6 +55,6 @@ func (c *Chromium) GetMasterKey() ([]byte, error) {
5555
return nil, errWrongSecurityCommand
5656
}
5757
c.masterKey = key
58-
log.Infof("%s initialized master key success", c.name)
58+
slog.Info("get master key success", "browser", c.name)
5959
return key, nil
6060
}

browser/chromium/chromium_linux.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ package chromium
55
import (
66
"crypto/sha1"
77
"fmt"
8+
"log/slog"
89
"os"
910

1011
"github.com/godbus/dbus/v5"
1112
keyring "github.com/ppacher/go-dbus-keyring"
1213
"golang.org/x/crypto/pbkdf2"
1314

1415
"github.com/moond4rk/hackbrowserdata/item"
15-
"github.com/moond4rk/hackbrowserdata/log"
1616
)
1717

1818
func (c *Chromium) GetMasterKey() ([]byte, error) {
@@ -34,7 +34,7 @@ func (c *Chromium) GetMasterKey() ([]byte, error) {
3434
}
3535
defer func() {
3636
if err := session.Close(); err != nil {
37-
log.Errorf("close session failed: %v", err)
37+
slog.Error("close dbus session error", "err", err.Error())
3838
}
3939
}()
4040
collections, err := svc.GetAllCollections()
@@ -50,7 +50,7 @@ func (c *Chromium) GetMasterKey() ([]byte, error) {
5050
for _, i := range items {
5151
label, err := i.GetLabel()
5252
if err != nil {
53-
log.Error(err)
53+
slog.Warn("get label from dbus", "err", err.Error())
5454
continue
5555
}
5656
if label == c.storage {
@@ -71,6 +71,6 @@ func (c *Chromium) GetMasterKey() ([]byte, error) {
7171
// @https://source.chromium.org/chromium/chromium/src/+/master:components/os_crypt/os_crypt_linux.cc
7272
key := pbkdf2.Key(secret, salt, 1, 16, sha1.New)
7373
c.masterKey = key
74-
log.Infof("%s initialized master key success", c.name)
74+
slog.Info("get master key success", "browser", c.name)
7575
return key, nil
7676
}

browser/chromium/chromium_windows.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ package chromium
55
import (
66
"encoding/base64"
77
"errors"
8+
"log/slog"
89
"os"
910

1011
"github.com/tidwall/gjson"
1112

1213
"github.com/moond4rk/hackbrowserdata/crypto"
1314
"github.com/moond4rk/hackbrowserdata/item"
14-
"github.com/moond4rk/hackbrowserdata/log"
1515
"github.com/moond4rk/hackbrowserdata/utils/fileutil"
1616
)
1717

@@ -35,9 +35,9 @@ func (c *Chromium) GetMasterKey() ([]byte, error) {
3535
}
3636
c.masterKey, err = crypto.DPAPI(key[5:])
3737
if err != nil {
38-
log.Errorf("%s failed to decrypt master key, maybe this profile was created on a different OS installation", c.name)
38+
slog.Error("decrypt master key failed", "err", err)
3939
return nil, err
4040
}
41-
log.Infof("%s initialized master key success", c.name)
41+
slog.Info("get master key success", "browser", c.name)
4242
return c.masterKey, nil
4343
}

browsingdata/bookmark/bookmark.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package bookmark
22

33
import (
44
"database/sql"
5+
"log/slog"
56
"os"
67
"sort"
78
"time"
@@ -11,7 +12,6 @@ import (
1112
"github.com/tidwall/gjson"
1213

1314
"github.com/moond4rk/hackbrowserdata/item"
14-
"github.com/moond4rk/hackbrowserdata/log"
1515
"github.com/moond4rk/hackbrowserdata/utils/fileutil"
1616
"github.com/moond4rk/hackbrowserdata/utils/typeutil"
1717
)
@@ -102,7 +102,7 @@ func (f *FirefoxBookmark) Parse(_ []byte) error {
102102
defer db.Close()
103103
_, err = db.Exec(closeJournalMode)
104104
if err != nil {
105-
log.Error(err)
105+
slog.Error("close journal mode error", "err", err)
106106
}
107107
rows, err := db.Query(queryFirefoxBookMark)
108108
if err != nil {
@@ -115,7 +115,7 @@ func (f *FirefoxBookmark) Parse(_ []byte) error {
115115
title, url string
116116
)
117117
if err = rows.Scan(&id, &url, &bt, &dateAdded, &title); err != nil {
118-
log.Warn(err)
118+
slog.Error("scan bookmark error", "err", err)
119119
}
120120
*f = append(*f, bookmark{
121121
ID: id,

browsingdata/browsingdata.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package browsingdata
22

33
import (
4-
"path"
4+
"log/slog"
55

66
"github.com/moond4rk/hackbrowserdata/browsingdata/bookmark"
77
"github.com/moond4rk/hackbrowserdata/browsingdata/cookie"
@@ -13,7 +13,6 @@ import (
1313
"github.com/moond4rk/hackbrowserdata/browsingdata/password"
1414
"github.com/moond4rk/hackbrowserdata/browsingdata/sessionstorage"
1515
"github.com/moond4rk/hackbrowserdata/item"
16-
"github.com/moond4rk/hackbrowserdata/log"
1716
"github.com/moond4rk/hackbrowserdata/utils/fileutil"
1817
)
1918

@@ -40,7 +39,7 @@ func New(items []item.Item) *Data {
4039
func (d *Data) Recovery(masterKey []byte) error {
4140
for _, source := range d.sources {
4241
if err := source.Parse(masterKey); err != nil {
43-
log.Errorf("parse %s error %s", source.Name(), err.Error())
42+
slog.Error("parse error", "source_data", source.Name(), "err", err.Error())
4443
continue
4544
}
4645
}
@@ -59,18 +58,18 @@ func (d *Data) Output(dir, browserName, flag string) {
5958

6059
f, err := output.CreateFile(dir, filename)
6160
if err != nil {
62-
log.Errorf("create file %s error %s", filename, err.Error())
61+
slog.Error("create file error", "filename", filename, "err", err.Error())
6362
continue
6463
}
6564
if err := output.Write(source, f); err != nil {
66-
log.Errorf("write to file %s error %s", filename, err.Error())
65+
slog.Error("write to file error", "filename", filename, "err", err.Error())
6766
continue
6867
}
6968
if err := f.Close(); err != nil {
70-
log.Errorf("close file %s error %s", filename, err.Error())
69+
slog.Error("close file error", "filename", filename, "err", err.Error())
7170
continue
7271
}
73-
log.Noticef("output to file %s success", path.Join(dir, filename))
72+
slog.Warn("export success", "filename", filename)
7473
}
7574
}
7675

browsingdata/cookie/cookie.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cookie
22

33
import (
44
"database/sql"
5+
"log/slog"
56
"os"
67
"sort"
78
"time"
@@ -11,7 +12,6 @@ import (
1112

1213
"github.com/moond4rk/hackbrowserdata/crypto"
1314
"github.com/moond4rk/hackbrowserdata/item"
14-
"github.com/moond4rk/hackbrowserdata/log"
1515
"github.com/moond4rk/hackbrowserdata/utils/typeutil"
1616
)
1717

@@ -55,7 +55,7 @@ func (c *ChromiumCookie) Parse(masterKey []byte) error {
5555
value, encryptValue []byte
5656
)
5757
if err = rows.Scan(&key, &encryptValue, &host, &path, &createDate, &expireDate, &isSecure, &isHTTPOnly, &hasExpire, &isPersistent); err != nil {
58-
log.Warn(err)
58+
slog.Error("scan chromium cookie error", "err", err)
5959
}
6060

6161
cookie := cookie{
@@ -77,7 +77,7 @@ func (c *ChromiumCookie) Parse(masterKey []byte) error {
7777
value, err = crypto.DecryptPass(masterKey, encryptValue)
7878
}
7979
if err != nil {
80-
log.Error(err)
80+
slog.Error("decrypt chromium cookie error", "err", err)
8181
}
8282
}
8383
cookie.Value = string(value)
@@ -123,7 +123,7 @@ func (f *FirefoxCookie) Parse(_ []byte) error {
123123
creationTime, expiry int64
124124
)
125125
if err = rows.Scan(&name, &value, &host, &path, &creationTime, &expiry, &isSecure, &isHTTPOnly); err != nil {
126-
log.Warn(err)
126+
slog.Error("scan firefox cookie error", "err", err)
127127
}
128128
*f = append(*f, cookie{
129129
KeyName: name,

browsingdata/creditcard/creditcard.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package creditcard
22

33
import (
44
"database/sql"
5+
"log/slog"
56
"os"
67

78
// import sqlite3 driver
89
_ "github.com/mattn/go-sqlite3"
910

1011
"github.com/moond4rk/hackbrowserdata/crypto"
1112
"github.com/moond4rk/hackbrowserdata/item"
12-
"github.com/moond4rk/hackbrowserdata/log"
1313
)
1414

1515
type ChromiumCreditCard []card
@@ -47,7 +47,7 @@ func (c *ChromiumCreditCard) Parse(masterKey []byte) error {
4747
value, encryptValue []byte
4848
)
4949
if err := rows.Scan(&guid, &name, &month, &year, &encryptValue, &address, &nickname); err != nil {
50-
log.Warn(err)
50+
slog.Error("scan chromium credit card error", "err", err)
5151
}
5252
ccInfo := card{
5353
GUID: guid,
@@ -64,7 +64,7 @@ func (c *ChromiumCreditCard) Parse(masterKey []byte) error {
6464
value, err = crypto.DecryptPass(masterKey, encryptValue)
6565
}
6666
if err != nil {
67-
log.Error(err)
67+
slog.Error("decrypt chromium credit card error", "err", err)
6868
}
6969
}
7070

@@ -102,7 +102,7 @@ func (c *YandexCreditCard) Parse(masterKey []byte) error {
102102
value, encryptValue []byte
103103
)
104104
if err := rows.Scan(&guid, &name, &month, &year, &encryptValue, &address, &nickname); err != nil {
105-
log.Warn(err)
105+
slog.Error("scan chromium credit card error", "err", err)
106106
}
107107
ccInfo := card{
108108
GUID: guid,
@@ -119,7 +119,7 @@ func (c *YandexCreditCard) Parse(masterKey []byte) error {
119119
value, err = crypto.DecryptPass(masterKey, encryptValue)
120120
}
121121
if err != nil {
122-
log.Error(err)
122+
slog.Error("decrypt chromium credit card error", "err", err)
123123
}
124124
}
125125
ccInfo.CardNumber = string(value)

0 commit comments

Comments
 (0)