All Projects → mahmoud → Lithoxyl

mahmoud / Lithoxyl

Application instrumentation and logging, with a geological bent.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Lithoxyl

Nanolog
Nanosecond scale logger inspired by https://github.com/PlatformLab/NanoLog
Stars: ✭ 220 (+56.03%)
Mutual labels:  logging, performance
Home
Project Glimpse: Node Edition - Spend less time debugging and more time developing.
Stars: ✭ 260 (+84.4%)
Mutual labels:  logging, performance
Timber Elixir
🌲 Great Elixir logging made easy
Stars: ✭ 226 (+60.28%)
Mutual labels:  logging, instrumentation
Appmetrics
App Metrics is an open-source and cross-platform .NET library used to record and report metrics within an application.
Stars: ✭ 1,986 (+1308.51%)
Mutual labels:  instrumentation, performance
Capture Thread
Lock-free framework for loggers, tracers, and mockers in multithreaded C++ programs.
Stars: ✭ 93 (-34.04%)
Mutual labels:  logging, instrumentation
Marathon
Cross-platform test runner written for Android and iOS projects
Stars: ✭ 250 (+77.3%)
Mutual labels:  instrumentation, performance
Rz Go
Ripzap - Fast and 0 allocs leveled JSON logger for Go ⚡️. Dependency free.
Stars: ✭ 256 (+81.56%)
Mutual labels:  logging, performance
Caliper
Caliper is an instrumentation and performance profiling library
Stars: ✭ 162 (+14.89%)
Mutual labels:  instrumentation, performance
Werelogs
A logging library providing efficient raw logging in the form of JSON data.
Stars: ✭ 16 (-88.65%)
Mutual labels:  logging, performance
Inspectit
inspectIT is the leading Open Source APM (Application Performance Management) tool for analyzing your Java (EE) applications.
Stars: ✭ 513 (+263.83%)
Mutual labels:  instrumentation, performance
thundra-agent-nodejs
Thundra Lambda Node.js Agent
Stars: ✭ 31 (-78.01%)
Mutual labels:  logging, instrumentation
Easy.logger
A modern, high performance cross platform wrapper for Log4Net.
Stars: ✭ 118 (-16.31%)
Mutual labels:  logging, performance
Reckless
Reckless logging. Low-latency, high-throughput, asynchronous logging library for C++.
Stars: ✭ 358 (+153.9%)
Mutual labels:  logging, performance
Hawktracer
HawkTracer is a highly portable, low-overhead, configurable profiling tool built in Amazon Video for getting performance metrics from low-end devices.
Stars: ✭ 108 (-23.4%)
Mutual labels:  instrumentation, performance
Orbit
C/C++ Performance Profiler
Stars: ✭ 2,291 (+1524.82%)
Mutual labels:  instrumentation, performance
Wperf
A simple HTTP load testing utility with detailed performance metrics.
Stars: ✭ 138 (-2.13%)
Mutual labels:  performance
Countwords
Playing with counting word frequencies (and performance) in various languages.
Stars: ✭ 136 (-3.55%)
Mutual labels:  performance
Web Vitals Module
Web Vitals: Essential module for a healthy Nuxt.js
Stars: ✭ 138 (-2.13%)
Mutual labels:  performance
Fragment Cache
WordPress plugin for partial and async caching.
Stars: ✭ 135 (-4.26%)
Mutual labels:  performance
Js Search
JS Search is an efficient, client-side search library for JavaScript and JSON objects
Stars: ✭ 1,920 (+1261.7%)
Mutual labels:  performance

lithoxyl

Application instrumentation and logging, with a geological bent. Documentation is available on Read the Docs.

An infomercial of sorts

"Has this ever happened to you?"

Here's an example of some ostensibly well-instrumented code.

import logging

def create_user(name):
    logging.info('creating user with name %r', name)
    try:
        success = _create_user(name)
        if success:
            logging.info('successfully created user %r', name)
        else:
            logging.error('failed to create user %r', name)
    except Exception:
        logging.critical('exception encountered while creating user %r',
                         name, exc_info=True)
    return success

Notice how the logging statements tend to dominate the code, almost drowning out the meaning of the code.

Here's lithoxyl's take:

from lithoxyl import stderr_log

def create_user(name):
    with stderr_log.critical('user creation', username=name, reraise=False) as r:
        success = _create_user(name)
        if not success:
            r.failure()
    return success

Feature brief

  • Transactional logging
  • Semantic instrumentation
  • Pure Python
  • Pythonic context manager API minimizes developer errors
  • Decorator syntax is convenient and unobtrusive
  • Human-readable structured logs
  • Reparseability thanks to autoescaping
  • Statistical accumulators for prerolled metrics
  • Programmatic configuration with sensible defaults just an import away
  • Synchronous mode for simplicity
  • Asynchronous operation for performance critical applications
  • Log file headers for metadata handling
  • Heartbeat for periodic output and checkpointing
  • Automatic, fast log parser generation (TBI)
  • Sinks
    • EWMASink
    • DebuggerSink
    • MomentSink
    • QuantileSink
    • StreamSink
    • SyslogSink
    • and more

Reasons to use Lithoxyl

  • More specific: distinguishes between level and status
  • Safer: Transactional logging ensures that exceptions are always recorded appropriately
  • Lower overhead: Lithoxyl can be used more places in code (e.g., tight loops), as well as more environments, without concern of excess overhead.
  • More Pythonic: Python's logging module is a port of log4j, and it shows.
  • No global state: Lithoxyl has virtually no internal global state, meaning fewer gotchas overall
  • Higher concurrency: less global state and less overhead mean fewer places where contention can occur
  • More succinct: Rather than try/except/finally, use a simple with block
  • More useful: Lithoxyl represents a balance between logging and profiling
  • More composable: Get exactly what you want by recombining new and provided components
  • More lightweight: Simplicity, composability, and practicality, make Lithoxyl something one might reach for earlier in the development process. Logging shouldn't be an afterthought, nor should it be a big investment that weighs down development, maintenance, and refactoring.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].