Skip to content

Commit 332cb6b

Browse files
add logging%get-level and refracture logging%set-level! in (liii logging) (#325)
1 parent 84f67b1 commit 332cb6b

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed

GoldfishStandardLibrary.tmu

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7131,6 +7131,56 @@
71317131
\;
71327132
</goldfish-chunk>
71337133

7134+
<\scm-chunk|goldfish/liii/logging.scm|true|true>
7135+
(define (%set-level! l)
7136+
7137+
\ \ (define (check-valid-level val)
7138+
7139+
\ \ \ \ (member val '(0 10 20 30 40 50)))
7140+
7141+
\ \
7142+
7143+
\ \ (cond ((integer? l)\
7144+
7145+
\ \ \ \ \ \ \ \ \ (if (check-valid-level l)
7146+
7147+
\ \ \ \ \ \ \ \ \ \ \ \ \ (set! level l)
7148+
7149+
\ \ \ \ \ \ \ \ \ \ \ \ \ (value-error "invalid level number" l)))
7150+
7151+
\;
7152+
7153+
\ \ \ \ \ \ \ \ ((rich-integer :is-type-of l)\
7154+
7155+
\ \ \ \ \ \ \ \ \ (if (check-valid-level (l :get))
7156+
7157+
\ \ \ \ \ \ \ \ \ \ \ \ \ (set! level (l :get))
7158+
7159+
\ \ \ \ \ \ \ \ \ \ \ \ \ (value-error "invalid level number" (l :get))))
7160+
7161+
\;
7162+
7163+
\ \ \ \ \ \ \ \ (else\
7164+
7165+
\ \ \ \ \ \ \ \ \ (type-error "level should be an integer"))))
7166+
7167+
\;
7168+
</scm-chunk>
7169+
7170+
<\scm-chunk|tests/goldfish/liii/logging-test.scm|true|true>
7171+
(check-catch 'type-error ((logging "app") :set-level! "invalid level"))
7172+
7173+
(check-catch 'value-error ((logging "app") :set-level! 60))
7174+
7175+
(let* ((logging-get-rich-level (logging "get-rich-level")))
7176+
7177+
\ (logging-get-rich-level :set-level! ($ 50))
7178+
7179+
\ (check (logging-get-rich-level :get-level) =\<gtr\> "CRITICAL"))
7180+
7181+
\;
7182+
</scm-chunk>
7183+
71347184
<subsection|构造器>
71357185

71367186
<\scm-chunk|goldfish/liii/logging.scm|true|true>
@@ -7227,6 +7277,40 @@
72277277
\;
72287278
</goldfish-chunk>
72297279

7280+
<paragraph|logging%get-level>
7281+
7282+
<\goldfish-chunk|goldfish/liii/logging.scm|true|true>
7283+
(define (%get-level)
7284+
7285+
\ \ (cond
7286+
7287+
\ \ \ \ ((= level 0) "NOTSET")
7288+
7289+
\ \ \ \ ((= level 10) "DEBUG")
7290+
7291+
\ \ \ \ ((= level 20) "INFO")
7292+
7293+
\ \ \ \ ((= level 30) "WARNING")
7294+
7295+
\ \ \ \ ((= level 40) "ERROR")
7296+
7297+
\ \ \ \ ((= level 50) "CRITICAL")))
7298+
7299+
\;
7300+
</goldfish-chunk>
7301+
7302+
<\scm-chunk|tests/goldfish/liii/logging-test.scm|true|true>
7303+
(check ((logging "app") :get-level) =\<gtr\> "WARNING")
7304+
7305+
(let* ((logging-get-level (logging "app-get-level")))
7306+
7307+
\ \ (logging-get-level :set-level! 50)
7308+
7309+
\ \ (check (logging-get-level :get-level) =\<gtr\> "CRITICAL"))
7310+
7311+
\;
7312+
</scm-chunk>
7313+
72307314
<paragraph|logging%debug?>
72317315

72327316
<\goldfish-chunk|goldfish/liii/logging.scm|true|true>

goldfish/liii/logging.scm

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,23 @@
3434
(level integer? WARNING))
3535

3636

37+
(define (%set-level! l)
38+
(define (check-valid-level val)
39+
(member val '(0 10 20 30 40 50)))
40+
41+
(cond ((integer? l)
42+
(if (check-valid-level l)
43+
(set! level l)
44+
(value-error "invalid level number" l)))
45+
46+
((rich-integer :is-type-of l)
47+
(if (check-valid-level (l :get))
48+
(set! level (l :get))
49+
(value-error "invalid level number" (l :get))))
50+
51+
(else
52+
(type-error "level should be an integer"))))
53+
3754
(define (@apply p-name)
3855
;; Check if logger with this name already exists in registry
3956
(let ((existing-logger (hash-table-ref loggers-registry p-name)))
@@ -64,6 +81,15 @@
6481
(display line)
6582
(path-append-text path line)))))
6683

84+
(define (%get-level)
85+
(cond
86+
((= level 0) "NOTSET")
87+
((= level 10) "DEBUG")
88+
((= level 20) "INFO")
89+
((= level 30) "WARNING")
90+
((= level 40) "ERROR")
91+
((= level 50) "CRITICAL")))
92+
6793
(define (%debug?)
6894
(<= level DEBUG))
6995

tests/goldfish/liii/logging-test.scm

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
(liii string)
44
(liii lang))
55

6+
(check-catch 'type-error ((logging "app") :set-level! "invalid level"))
7+
(check-catch 'value-error ((logging "app") :set-level! 60))
8+
(let* ((logging-get-rich-level (logging "get-rich-level")))
9+
(logging-get-rich-level :set-level! ($ 50))
10+
(check (logging-get-rich-level :get-level) => "CRITICAL"))
11+
612
;; Test @apply: Verify that the same logger instance is returned for the same name
713
(let ((logger1 (logging "test-module"))
814
(logger2 (logging "test-module")))
@@ -13,6 +19,11 @@
1319
(logger2 (logging "module-b")))
1420
(check-false (eq? logger1 logger2)))
1521

22+
(check ((logging "app") :get-level) => "WARNING")
23+
(let* ((logging-get-level (logging "app-get-level")))
24+
(logging-get-level :set-level! 50)
25+
(check (logging-get-level :get-level) => "CRITICAL"))
26+
1627
(check-false ((logging "app") :debug?))
1728

1829
(check-false ((logging "app") :info?))

0 commit comments

Comments
 (0)