Skip to content

Commit 780f421

Browse files
committed
unified plugin logging
1 parent 104ece4 commit 780f421

File tree

8 files changed

+164
-24
lines changed

8 files changed

+164
-24
lines changed

cmd/config-boltdb.yaml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,17 @@ keyStorage:
7272
type: local
7373
local:
7474
path: ./jwt/test_artifacts/private.pem
75-
logger:
76-
dumpRequest: false
7775
adminPanel:
7876
enabled: true
7977
loginWebApp:
8078
type: default
8179
emailTemplaits:
8280
type: default
81+
# logger settings
82+
logger:
83+
# logs format (json, text)
84+
format: json
85+
# exclude body for HTTP requests that can contain sensitive data
86+
logSensitiveData: false
87+
common:
88+
level: debug

config/configurator.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ func NewServer(config model.ConfigurationStorage, restartChan chan<- bool) (mode
194194

195195
sessionS := model.NewSessionManager(settings.SessionStorage.SessionDuration, session)
196196

197-
impS, err := NewImpersonationProvider(settings.Impersonation)
197+
impS, err := NewImpersonationProvider(logger, settings.Impersonation)
198198
if err != nil {
199199
logger.Error("Error creating impersonation provider", logging.FieldError, err)
200200
errs = append(errs, fmt.Errorf("error creating impersonation provider: %v", err))
@@ -237,7 +237,10 @@ func NewTokenService(
237237
return tokenService, err
238238
}
239239

240-
func NewImpersonationProvider(settings model.ImpersonationSettings) (model.ImpersonationProvider, error) {
240+
func NewImpersonationProvider(
241+
logger *slog.Logger,
242+
settings model.ImpersonationSettings,
243+
) (model.ImpersonationProvider, error) {
241244
switch settings.Type {
242245
case model.ImpersonationServiceTypeNone, "":
243246
return nil, nil
@@ -246,7 +249,7 @@ func NewImpersonationProvider(settings model.ImpersonationSettings) (model.Imper
246249
case model.ImpersonationServiceTypeScope:
247250
return imp.NewScopeImpersonator(settings.Scope.AllowedScopes), nil
248251
case model.ImpersonationServiceTypePlugin:
249-
return impPlugin.NewImpersonationProvider(settings.Plugin, time.Second)
252+
return impPlugin.NewImpersonationProvider(logger, settings.Plugin, time.Second)
250253
}
251254

252255
return nil, nil

impersonation/plugin/provider.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
package plugin
22

33
import (
4+
"log/slog"
45
"os"
56
"os/exec"
67
"time"
78

8-
"github.com/hashicorp/go-hclog"
99
"github.com/hashicorp/go-plugin"
1010
grpcShared "github.com/madappgang/identifo/v2/impersonation/grpc/shared"
1111
"github.com/madappgang/identifo/v2/impersonation/plugin/shared"
12+
"github.com/madappgang/identifo/v2/logging"
1213
"github.com/madappgang/identifo/v2/model"
1314
)
1415

15-
func NewImpersonationProvider(settings model.PluginSettings, timeout time.Duration) (model.ImpersonationProvider, error) {
16+
func NewImpersonationProvider(
17+
logger *slog.Logger,
18+
settings model.PluginSettings,
19+
timeout time.Duration,
20+
) (model.ImpersonationProvider, error) {
1621
params := []string{}
1722
for k, v := range settings.Params {
1823
params = append(params, "-"+k)
@@ -24,10 +29,7 @@ func NewImpersonationProvider(settings model.PluginSettings, timeout time.Durati
2429
Plugins: shared.PluginMap,
2530
Cmd: exec.Command(settings.Cmd, params...),
2631
AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC},
27-
Logger: hclog.New(&hclog.LoggerOptions{
28-
Level: hclog.Debug,
29-
JSONFormat: true,
30-
}),
32+
Logger: logging.NewHCLogger(logger, false),
3133
}
3234

3335
if settings.RedirectStd {

logging/hclog.go

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package logging
2+
3+
import (
4+
"context"
5+
"io"
6+
"log"
7+
"log/slog"
8+
"os"
9+
10+
"github.com/hashicorp/go-hclog"
11+
)
12+
13+
// check that HCLogger implements hclog.Logger interface
14+
var _ hclog.Logger = &HCLogger{}
15+
16+
type HCLogger struct {
17+
name string
18+
traceEnabled bool
19+
logger *slog.Logger
20+
}
21+
22+
func NewHCLogger(logger *slog.Logger, traceEnabled bool) *HCLogger {
23+
return &HCLogger{
24+
logger: logger,
25+
traceEnabled: traceEnabled,
26+
}
27+
}
28+
29+
func (l *HCLogger) Log(level hclog.Level, msg string, args ...interface{}) {
30+
switch level {
31+
case hclog.Trace:
32+
l.Trace(msg, args...)
33+
case hclog.Debug:
34+
l.Debug(msg, args...)
35+
case hclog.Info:
36+
l.Info(msg, args...)
37+
case hclog.Warn:
38+
l.Warn(msg, args...)
39+
case hclog.Error:
40+
l.Error(msg, args...)
41+
}
42+
}
43+
44+
func (l *HCLogger) Trace(msg string, args ...interface{}) {
45+
if !l.traceEnabled {
46+
return
47+
}
48+
49+
l.logger.Debug(msg, args...)
50+
}
51+
52+
func (l *HCLogger) Debug(msg string, args ...interface{}) {
53+
l.logger.Debug(msg, args...)
54+
}
55+
56+
func (l *HCLogger) Info(msg string, args ...interface{}) {
57+
l.logger.Info(msg, args...)
58+
}
59+
60+
func (l *HCLogger) Warn(msg string, args ...interface{}) {
61+
l.logger.Warn(msg, args...)
62+
}
63+
64+
func (l *HCLogger) Error(msg string, args ...interface{}) {
65+
l.logger.Error(msg, args...)
66+
}
67+
68+
func (l *HCLogger) IsTrace() bool {
69+
return l.traceEnabled && l.logger.Enabled(context.Background(), slog.LevelDebug)
70+
}
71+
72+
func (l *HCLogger) IsDebug() bool {
73+
return l.logger.Enabled(context.Background(), slog.LevelDebug)
74+
}
75+
76+
func (l *HCLogger) IsInfo() bool {
77+
return l.logger.Enabled(context.Background(), slog.LevelInfo)
78+
}
79+
80+
func (l *HCLogger) IsWarn() bool {
81+
return l.logger.Enabled(context.Background(), slog.LevelWarn)
82+
}
83+
84+
func (l *HCLogger) IsError() bool {
85+
return l.logger.Enabled(context.Background(), slog.LevelError)
86+
}
87+
88+
func (l *HCLogger) With(args ...interface{}) hclog.Logger {
89+
return &HCLogger{
90+
name: l.name,
91+
traceEnabled: l.traceEnabled,
92+
logger: l.logger.With(args...),
93+
}
94+
}
95+
96+
func (l *HCLogger) ImpliedArgs() []interface{} {
97+
return nil
98+
}
99+
func (l *HCLogger) ResetNamed(name string) hclog.Logger {
100+
return &HCLogger{
101+
name: name,
102+
traceEnabled: l.traceEnabled,
103+
logger: l.logger.With("name", name),
104+
}
105+
}
106+
107+
func (l *HCLogger) Named(name string) hclog.Logger {
108+
return &HCLogger{
109+
name: name,
110+
traceEnabled: l.traceEnabled,
111+
logger: l.logger.With("name", name),
112+
}
113+
}
114+
115+
func (l *HCLogger) Name() string {
116+
return l.name
117+
}
118+
119+
func (l *HCLogger) SetLevel(level hclog.Level) {
120+
}
121+
122+
func (l *HCLogger) StandardLogger(opts *hclog.StandardLoggerOptions) *log.Logger {
123+
return slog.NewLogLogger(l.logger.Handler(), slog.LevelDebug)
124+
}
125+
126+
func (l *HCLogger) StandardWriter(opts *hclog.StandardLoggerOptions) io.Writer {
127+
return os.Stderr
128+
}

storage/plugin/user.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package plugin
22

33
import (
4+
"log/slog"
45
"os"
56
"os/exec"
67

7-
"github.com/hashicorp/go-hclog"
88
"github.com/hashicorp/go-plugin"
9+
"github.com/madappgang/identifo/v2/logging"
910
"github.com/madappgang/identifo/v2/model"
1011
grpcShared "github.com/madappgang/identifo/v2/storage/grpc/shared"
1112
"github.com/madappgang/identifo/v2/storage/plugin/shared"
1213
)
1314

1415
// NewUserStorage creates and inits plugin user storage.
15-
func NewUserStorage(settings model.PluginSettings) (model.UserStorage, error) {
16+
func NewUserStorage(logger *slog.Logger, settings model.PluginSettings) (model.UserStorage, error) {
1617
params := []string{}
1718
for k, v := range settings.Params {
1819
params = append(params, "-"+k)
@@ -24,10 +25,7 @@ func NewUserStorage(settings model.PluginSettings) (model.UserStorage, error) {
2425
Plugins: shared.PluginMap,
2526
Cmd: exec.Command(settings.Cmd, params...),
2627
AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC},
27-
Logger: hclog.New(&hclog.LoggerOptions{
28-
Level: hclog.Debug,
29-
JSONFormat: true,
30-
}),
28+
Logger: logging.NewHCLogger(logger, false),
3129
}
3230

3331
if settings.RedirectStd {

storage/user.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func NewUserStorage(
2929
case model.DBTypeMem:
3030
return mem.NewUserStorage()
3131
case model.DBTypePlugin:
32-
return plugin.NewUserStorage(settings.Plugin)
32+
return plugin.NewUserStorage(logger, settings.Plugin)
3333
case model.DBTypeGRPC:
3434
return grpc.NewUserStorage(settings.GRPC)
3535
default:

user_payload_provider/plugin/provider.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
package plugin
22

33
import (
4+
"log/slog"
45
"os"
56
"os/exec"
67
"time"
78

8-
"github.com/hashicorp/go-hclog"
99
"github.com/hashicorp/go-plugin"
10+
"github.com/madappgang/identifo/v2/logging"
1011
"github.com/madappgang/identifo/v2/model"
1112
grpcShared "github.com/madappgang/identifo/v2/user_payload_provider/grpc/shared"
1213
"github.com/madappgang/identifo/v2/user_payload_provider/plugin/shared"
1314
)
1415

1516
// NewTokenPayloadProvider creates and inits plugin for payload provider.
16-
func NewTokenPayloadProvider(settings model.PluginSettings, timeout time.Duration) (model.TokenPayloadProvider, error) {
17+
func NewTokenPayloadProvider(
18+
logger *slog.Logger,
19+
settings model.PluginSettings,
20+
timeout time.Duration,
21+
) (model.TokenPayloadProvider, error) {
1722
params := []string{}
1823
for k, v := range settings.Params {
1924
params = append(params, "-"+k)
@@ -25,10 +30,7 @@ func NewTokenPayloadProvider(settings model.PluginSettings, timeout time.Duratio
2530
Plugins: shared.PluginMap,
2631
Cmd: exec.Command(settings.Cmd, params...),
2732
AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC},
28-
Logger: hclog.New(&hclog.LoggerOptions{
29-
Level: hclog.Debug,
30-
JSONFormat: true,
31-
}),
33+
Logger: logging.NewHCLogger(logger, false),
3234
}
3335

3436
if settings.RedirectStd {

web/api/login.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ func (ar *Router) getTokenPayloadService(app model.AppData) (model.TokenPayloadP
291291

292292
case model.TokenPayloadServicePlugin:
293293
ps, err = plugin.NewTokenPayloadProvider(
294+
ar.logger,
294295
model.PluginSettings{
295296
Cmd: app.TokenPayloadServicePluginSettings.Cmd,
296297
Params: app.TokenPayloadServicePluginSettings.Params,

0 commit comments

Comments
 (0)