Respect log level setting by client

* This fixes #868
* In everything.ts
  - import LoggingLevel from sdk
  - add log messages for all levels
  - add isMessageIgnored function that checks the incoming level against the logLevel and returns false if it is a lower index than the logLevel
  - in the setInterval for sending dummy logs, only send the message if it is not ignored by the logLevel.
This commit is contained in:
cliffhall
2025-03-15 16:39:14 -04:00
parent a835f3c2d7
commit 0f0ed351cb

View File

@@ -9,6 +9,7 @@ import {
ListResourcesRequestSchema,
ListResourceTemplatesRequestSchema,
ListToolsRequestSchema,
LoggingLevel,
ReadResourceRequestSchema,
Resource,
SetLevelRequestSchema,
@@ -100,9 +101,8 @@ export const createServer = () => {
let subscriptions: Set<string> = new Set();
let subsUpdateInterval: NodeJS.Timeout | undefined;
let logsUpdateInterval: NodeJS.Timeout | undefined;
// Set up update interval for subscribed resources
subsUpdateInterval = setInterval(() => {
for (const uri of subscriptions) {
server.notification({
@@ -112,21 +112,34 @@ export const createServer = () => {
}
}, 5000);
let logLevel: LoggingLevel = "debug";
let logsUpdateInterval: NodeJS.Timeout | undefined;
const messages = [
{level: "debug", data: "Debug-level message"},
{level: "info", data: "Info-level message"},
{level: "notice", data: "Notice-level message"},
{level: "warning", data: "Warning-level message"},
{level: "error", data: "Error-level message"},
{level: "critical", data: "Critical-level message"},
{level: "alert", data: "Alert level-message"},
{level: "emergency", data: "Emergency-level message"}
]
const isMessageIgnored = (level:LoggingLevel):boolean => {
const currentLevel = messages.findIndex((msg) => logLevel === msg.level);
const messageLevel = messages.findIndex((msg) => level === msg.level);
return messageLevel < currentLevel;
}
// Set up update interval for random log messages
logsUpdateInterval = setInterval(() => {
const messages = [
{level: "info", data: "Information is good"},
{level: "warning", data: "Warning is scary"},
{level: "error", data: "Error is bad"},
]
server.notification({
let message = {
method: "notifications/message",
params: messages[Math.floor(Math.random()*3)],
});
params: messages[Math.floor(Math.random() * messages.length)],
}
if (!isMessageIgnored(message.params.level as LoggingLevel)) server.notification(message);
}, 15000);
// Helper method to request sampling from client
const requestSampling = async (
context: string,
@@ -549,6 +562,7 @@ export const createServer = () => {
server.setRequestHandler(SetLevelRequestSchema, async (request) => {
const { level } = request.params;
logLevel = level;
// Demonstrate different log levels
await server.notification({
@@ -556,7 +570,7 @@ export const createServer = () => {
params: {
level: "debug",
logger: "test-server",
data: `Logging level set to: ${level}`,
data: `Logging level set to: ${logLevel}`,
},
});