Full-featured client with async support and Pydantic models.
pip install quicksearch-python-sdk
Serilog sink for seamless .NET application integration.
dotnet add package QuickSearch.Serilog
Pino transport for Node.js with worker thread architecture.
npm install quicksearch-pino-transport
| Feature | Python | .NET | TypeScript |
|---|---|---|---|
| Batching | Yes | Yes (1000/2s) | Yes (100/2s) |
| Retry/Backoff | Yes | Yes | Yes |
| Non-blocking | Yes (async) | Yes | Yes (worker thread) |
| Structured Logging | Yes | Yes | Yes |
| OpenTelemetry | Planned | Planned | Yes |
pip install quicksearch-python-sdk
from quicksearch import QuickSearchClient, EventData
# Initialize client
client = QuickSearchClient(
base_url="http://localhost:3000",
api_key="your-api-key"
)
# Ingest event
event = EventData(
type="user_login",
application="web_app",
data={"user_id": "12345", "ip_address": "192.168.1.100"}
)
response = client.ingest_event(event)
print(response)
# Search events
result = client.search_events(query="login", limit=10)
for event in result.events:
print(f"{event['timestamp_iso']}: {event['message']}")
import asyncio
from quicksearch import AsyncQuickSearchClient
async def main():
async with AsyncQuickSearchClient(api_key="your-api-key") as client:
response = await client.ingest_event(EventData(type="test"))
result = await client.search_events(query="test")
asyncio.run(main())
# Using context manager for automatic cleanup
with QuickSearchClient(api_key="your-api-key") as client:
response = client.ingest_event(EventData(type="test_event"))
dotnet add package QuickSearch.Serilog
using Serilog;
using QuickSearch.Serilog;
// Basic configuration
Log.Logger = new LoggerConfiguration()
.WriteTo.QuickSearch(
serverUrl: "http://localhost:3000",
apiKey: "your-api-key",
application: "MyWebApp")
.CreateLogger();
// Log events
Log.Information("User {UserId} logged in from {IpAddress}", userId, ipAddress);
Log.Warning("High memory usage: {MemoryUsage}%", memoryUsage);
Log.Error(ex, "Failed to process order {OrderId}", orderId);
Log.Logger = new LoggerConfiguration()
.WriteTo.QuickSearch(
serverUrl: "http://localhost:3000",
apiKey: "your-api-key",
application: "MyWebApp",
restrictedToMinimumLevel: LogEventLevel.Information,
batchPostingLimit: 500,
period: TimeSpan.FromSeconds(5),
queueSizeLimit: 50000)
.CreateLogger();
// ASP.NET Core integration
builder.Host.UseSerilog((context, configuration) =>
{
configuration
.ReadFrom.Configuration(context.Configuration)
.WriteTo.QuickSearch(
serverUrl: context.Configuration["QuickSearch:ServerUrl"],
apiKey: context.Configuration["QuickSearch:ApiKey"],
application: context.Configuration["QuickSearch:Application"]);
});
npm install quicksearch-pino-transport pino
import pino from 'pino';
const logger = pino({
transport: {
target: 'quicksearch-pino-transport',
options: {
serverUrl: 'http://localhost:3000',
apiKey: 'your-api-key',
application: 'my-app'
}
}
});
// Log events
logger.info({ userId: '123' }, 'User logged in');
logger.error({ err }, 'An error occurred');
logger.warn({ cpu: 95 }, 'High CPU usage');
const logger = pino({
transport: {
targets: [
{
target: 'pino-pretty',
options: { colorize: true },
level: 'trace'
},
{
target: 'quicksearch-pino-transport',
options: {
serverUrl: 'http://localhost:3000',
apiKey: 'your-api-key',
application: 'my-app',
batchSize: 100,
flushInterval: 2000
},
level: 'info'
}
]
}
});
// Graceful shutdown
process.on('SIGTERM', async () => {
logger.flush();
await new Promise(resolve => setTimeout(resolve, 1000));
process.exit(0);
});
If you prefer not to use an SDK, you can make HTTP requests directly to the QuickSearch API.
# Send an event via HTTP
curl -X POST http://localhost:3000/api/events \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"type": "custom_event",
"application": "my_app",
"data": {"key": "value"}
}'