Per request and window-based alerting

Alerts are written in JavaScript and run for every request captured by logbee.net. They have full access to request details, including URL, status code, and logs.

You decide when an alert triggers by calling callback(true).

Logbee Microsoft Teams alert
Get notified when Google or Bing crawlers encounter errors
(alert evaluated for every captured request)
function(context, callback) {
    // eg: "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    const userAgent = context.requestLog.userAgent; 
    const statusCode = context.requestLog.response.httpStatusCode; 

    if(statusCode >= 500) {
        if(/Google/i.test(userAgent) || /bingbot/i.test(userAgent)) {
            ::return callback(true);
        }
    }

    return callback(false);
}
Get notified when 20 or more 5xx errors occured within 10 minutes
(alert running on a scheduled interval)
function (scheduledContext, callback) {
    const count = await scheduledContext.requests.count([
        {
            field: "startDateTime",
            value: new Date(Date.now() - 10 * 60 * 1000).toISOString(),
            operator: "GreaterOrEqualThan"
        },
        {
            field: "httpStatusCode",
            value: 500,
            operator: "GreaterOrEqualThan"
        }
    ]);

    callback(count >= 20);
}
Get notified when /checkout/complete fails with 500 status code
(alert evaluated for every captured request)
function(context, callback) {
    const path = context.requestLog.url.path.toLowerCase();
    const statusCode = context.requestLog.response.httpStatusCode;
    const isLocalhost = context.requestLog.url.absoluteUri.includes("localhost");

    if(!isLocalhost) {
        if(path === "/checkout/complete" && statusCode >= 500) {
            ::return(true);
        }
    }

    return callback(false);
}
Get notified when a request contains a specific error message
(alert evaluated for every captured request)
function(context, callback) {
    const errors = [
        "Object reference not set to an instance of an object",
        "Sequence contains no elements"
    ];

    for (let i = 0; i < context.requestLog.logs.length; i++) {
        const log = context.requestLog.logs[i];
        if(errors.some(msg => "Error" === log.logLevel && log.message.includes(msg))) {
            ::return callback(true);
        }
    }

    return callback(false);
}

HTTP logging with full context

logbee.net stores all HTTP requests individually, alongside all their related logs, in the order as they occurred. See every request as a complete story.

Request URL, body, headers, status code, and logs - everything in one view.

Request logs Request details

Request interceptors

Not every request needs to be logged. With interceptors, you can block irrelevant, sensitive, or repetitive logs before they are captured by logbee.net.

Interceptors run before a request is saved, and have access to all the properties - URL, status code, headers and logs. Calling the reject() function prevents the request from being stored.

Logbee Interceptors
Ignore 200 GET /status/ping health checks
(interceptor evaluated before a request is persisted)
function(context, reject) {
    const statusCode = context.requestLog.response.httpStatusCode;
    const localPath = context.requestLog.url.path.toLowerCase();
    const method = context.requestLog.httpMethod;

    if (localPath === "/status/ping".toLowerCase() && /GET/i.test(method)) {
        if(statusCode === 200) {
            ::return reject();
        }
    }

    // otherwise, allow the request to be saved
}
Ignore traffic generated by bots
(interceptor evaluated before a request is persisted)
function(context, reject) {
    const statusCode = context.requestLog.response.httpStatusCode;
    const userAgent = context.requestLog.userAgent;

    if (userAgent.contains("Thinkbot") && statusCode < 500) {
        ::return reject();
    }

    // otherwise, allow the request to be saved
}
Ignore /payment/* requests
(interceptor evaluated before a request is persisted)
function(context, reject) {
    const statusCode = context.requestLog.response.httpStatusCode;
    const localPath = context.requestLog.url.path.toLowerCase();

    if (localPath.startsWith("/payment/")) {
        ::return reject();
    }

    // otherwise, allow the request to be saved
}
Ignore 404 noise for static files
(interceptor evaluated before a request is persisted)
function(context, reject) {
    const statusCode = context.requestLog.response.httpStatusCode;
    const path = context.requestLog.url.path.toLowerCase();

    if(statusCode === 404) {
        if(path.endsWith(".ico") || path.endsWith(".map") || path.includes("/static/")) {
            ::return reject();
        }
    }

    // otherwise, allow the request to be saved
}

Simplified self-hosting

Logbee runs with just two web apps (UI and Service), and a database.
Deployable on Docker/Kubernetes, IIS, or Azure.
Database options include MongoDB, CosmosDB, MySQL, or SQL Server (more storage options under way).
Each application is configured through a simple JSON file.

Web applications
You can check this blog post for a tutorial on hosting Logbee on a Linux server using Docker.
Windows Windows
Linux Linux
Docker Docker
Docker K8s
Microsoft IIS
Azure Azure
Docker MongoDB
Docker Cosmos DB
Docker MySQL
Docker MS-SQL

Integrations

Pricing

Developer
free
  • 5,000 requests / month
  • unlimited applications
  • unlimited alerts
  • 2 users
Startup
14 USD / month
  • 250,000 requests / month
  • unlimited applications
  • unlimited alerts
  • unlimited users
Business
28 USD / month
  • 1,000,000 requests / month
  • unlimited applications
  • unlimited alerts
  • unlimited users
Business+
60 USD / month
  • 5,000,000 requests / month
  • unlimited applications
  • unlimited alerts
  • unlimited users
To get started, create an account. No payment information is required.
Developer
free
Standard
350 USD
one time payment
  • Standard EULA
  • Host on your own server
  • Unlimited applications
  • Unlimited updates
Enterprise
850 USD
one time payment
  • Enterprise EULA
  • Host on your own server and on your clients servers
  • You can ship Logbee as part of your release artifacts
  • Unlimited applications
  • Unlimited updates

Available on Windows, Linux, Azure, and containerized environments

Microsoft IIS Windows
Linux Linux
Azure Azure
Docker Docker

Who is Logbee for?

  • Developers and DevOps engineers looking for a lightweight alternative to complex monitoring tools.
  • Teams working on microservices or cloud-native apps who need visibility across services.
  • Software teams and vendors who want to package a logging visualization tool alongside the applications they ship.

Who is using logbee.net?

logbee.net is currently being used by about 107 applications, having a total number of 9,015,276 requests processed in the last 30 days.