9
9
ListResourcesRequestSchema ,
10
10
ListResourceTemplatesRequestSchema ,
11
11
ListToolsRequestSchema ,
12
+ LoggingLevel ,
12
13
ReadResourceRequestSchema ,
13
14
Resource ,
14
15
SetLevelRequestSchema ,
@@ -100,9 +101,8 @@ export const createServer = () => {
100
101
101
102
let subscriptions : Set < string > = new Set ( ) ;
102
103
let subsUpdateInterval : NodeJS . Timeout | undefined ;
103
- let logsUpdateInterval : NodeJS . Timeout | undefined ;
104
-
105
104
// Set up update interval for subscribed resources
105
+
106
106
subsUpdateInterval = setInterval ( ( ) => {
107
107
for ( const uri of subscriptions ) {
108
108
server . notification ( {
@@ -112,21 +112,34 @@ export const createServer = () => {
112
112
}
113
113
} , 5000 ) ;
114
114
115
+ let logLevel : LoggingLevel = "debug" ;
116
+ let logsUpdateInterval : NodeJS . Timeout | undefined ;
117
+ const messages = [
118
+ { level : "debug" , data : "Debug-level message" } ,
119
+ { level : "info" , data : "Info-level message" } ,
120
+ { level : "notice" , data : "Notice-level message" } ,
121
+ { level : "warning" , data : "Warning-level message" } ,
122
+ { level : "error" , data : "Error-level message" } ,
123
+ { level : "critical" , data : "Critical-level message" } ,
124
+ { level : "alert" , data : "Alert level-message" } ,
125
+ { level : "emergency" , data : "Emergency-level message" }
126
+ ]
127
+
128
+ const isMessageIgnored = ( level :LoggingLevel ) :boolean => {
129
+ const currentLevel = messages . findIndex ( ( msg ) => logLevel === msg . level ) ;
130
+ const messageLevel = messages . findIndex ( ( msg ) => level === msg . level ) ;
131
+ return messageLevel < currentLevel ;
132
+ }
133
+
115
134
// Set up update interval for random log messages
116
135
logsUpdateInterval = setInterval ( ( ) => {
117
- const messages = [
118
- { level : "info" , data : "Information is good" } ,
119
- { level : "warning" , data : "Warning is scary" } ,
120
- { level : "error" , data : "Error is bad" } ,
121
- ]
122
- server . notification ( {
136
+ let message = {
123
137
method : "notifications/message" ,
124
- params : messages [ Math . floor ( Math . random ( ) * 3 ) ] ,
125
- } ) ;
138
+ params : messages [ Math . floor ( Math . random ( ) * messages . length ) ] ,
139
+ }
140
+ if ( ! isMessageIgnored ( message . params . level as LoggingLevel ) ) server . notification ( message ) ;
126
141
} , 15000 ) ;
127
142
128
-
129
-
130
143
// Helper method to request sampling from client
131
144
const requestSampling = async (
132
145
context : string ,
@@ -549,14 +562,15 @@ export const createServer = () => {
549
562
550
563
server . setRequestHandler ( SetLevelRequestSchema , async ( request ) => {
551
564
const { level } = request . params ;
565
+ logLevel = level ;
552
566
553
567
// Demonstrate different log levels
554
568
await server . notification ( {
555
569
method : "notifications/message" ,
556
570
params : {
557
571
level : "debug" ,
558
572
logger : "test-server" ,
559
- data : `Logging level set to: ${ level } ` ,
573
+ data : `Logging level set to: ${ logLevel } ` ,
560
574
} ,
561
575
} ) ;
562
576
0 commit comments