Skip to main content

Moon Logger

The Moon Logger is a Python logging utility with customizable features for handling both stream and file logging.

Requirements

Table of Contents

Installation

Install the Moon Logger using git:

git clone https://github.com/reslaid/moon.git

Installing the Moon Logger using PyPI:

  • NT:

    pip install moonlogger
    
  • Posix:

    pip3 install moonlogger
    

Usage

Initializing Moon

from moon.logger import Moon
from moon.formats import Formats
from moon._types import LogLevel

# Create an instance of the Moon logger
moon = Moon(
    name=__name__,                  # Name of the logger (defaults to the name of the current module)
    log_file='moon.json',           # Path to the log file (defaults to 'moon.json')
    stream_handler=True,            # Whether to use a stream handler (defaults to True)
    file_handler=True,              # Whether to use a file handler (defaults to True)
    disabled=False,                 # Whether the logger is disabled (defaults to False)
    stream_level=LogLevel.DEBUG,    # Log level for the stream handler (defaults to DEBUG)
    file_level=LogLevel.DEBUG,      # Log level for the file handler (defaults to DEBUG)
    stream_format=Formats.CLang(),  # Log format for the stream handler (default is Formats.CLang())
    file_format=Formats.JsonIndented()  # Log format for the file handler (default is Formats.JsonIndented())
)

Log Levels

The Moon Logger supports the following log levels:

  • LogLevel.DEBUG
  • LogLevel.INFO
  • LogLevel.WARNING
  • LogLevel.ERROR
  • LogLevel.CRITICAL

Archiving Logs:

# Archive the log file into a ZIP file and remove the original log file
moon.archive()

Custom Formatting:

# Set a custom log format for all handlers in the Moon logger
moon.set_log_format("[{name}] - [{levelname}]: {message}")

Formats built into moon logger:

  • CLang
  • Json
  • Csv
  • Table
  • Html
  • Xml
  • Markdown
  • Yaml
  • Syslog
  • JsonIndented
  • Logstash
  • ShortJson
  • ColoredConsole
  • DelimiterSeparatedJson
  • Traceback
  • TracebackV2
  • HexDump
  • Base64
  • Binary
  • Emoji

Logger Methods:

  • moon.set_formatter(formatter): Set a custom formatter for the logger.
  • moon.add_formatter(formatter): Add a formatter to the logger.
  • moon.del_formatters(): Remove all formatters from the logger.
  • moon.del_formatter(formatter): Remove a specific formatter from the logger.
  • moon.edit_format(new_log_format): Edit the log format, ensuring required placeholders are present.
  • moon.reset_format(): Reset the log format to the default.
  • moon.base_logger(): Getting the base logger.

Examples

  • Logging Message:
# Import the Moon logger and Formats module
from moon.logger import Moon
from moon.formats import Formats

# Initialize the Moon logger
logger = Moon(
    name=__name__,
    file_handler=False,  # Disable file handler
    stream_format=Formats.CLang()  # Use CLang format for stream handler
).base_logger()

# Log a debug message
logger.debug(
    msg="message"
)

# Log an informational message
logger.info(
    msg="message"
)

# Log a warning message
logger.warning(
    msg="message"
)

# Log an error message
logger.error(
    msg="message"
)

# Log a critical message
logger.critical(
    msg="message"
)

# Log a fatal message
logger.fatal(
    msg="message"
)
  • Custom log format:
from moon.logger import Moon, logging

# Define a custom log format string
custom_log_format = logging.Formatter(
    "[{levelname}] [{asctime}] - {message}",
    style="{"
)

# Initialize the Moon logger with the custom log format
logger = Moon(
    name=__name__,
    file_handler=False,
    stream_format=custom_log_format
).base_logger()

# Log a message using the custom format
logger.info(
    msg="Custom log message"
)
  • Built-in log format:
from moon.logger import Moon
from moon.formats import Formats 


# Initialize the Moon logger with the built-in log format
logger = Moon(
    name=__name__,
    file_handler=False,
    stream_format=Formats.CLang() # You can choose any built-in log format
).base_logger()

# Log a message using the built-in log format
logger.info(
    msg="Custom log message"
)
  • Archiving a file:
from moon.logger import Moon
from moon.formats import Formats 

# Initialize the Moon logger with a file handler and JsonIndented format
moon = Moon(
    name=__name__,
    log_file="moon.json",
    file_handler=True,
    file_format=Formats.JsonIndented()
)

# Get the base logger from the Moon logger instance
logger = moon.base_logger()

# Log a custom message with an informational level
logger.info(
    msg="Custom log message"
)

# Archive log file
moon.archive()
  • Changing Log Format Dynamically:
from moon.logger import Moon

# Create an instance of Moon Logger with a file handler
moon = Moon(name="dynamic_format_logger", file_handler=True)
logger = moon.base_logger()

# Log an error message
logger.error(msg="An error occurred.")

# Change the log format
moon.edit_format("[{levelname}] {message} ({asctime})")

# Log another message with the updated format
logger.info(msg="Updated log format.")
  • Removing All Formatters:
from moon.logger import Moon

# Create an instance of Moon Logger with a file handler
moon = Moon(name="remove_all_formatters_logger", file_handler=True)
logger = moon.base_logger()

# Add two formatters
moon.add_formatter(Moon.formats.CLang())
moon.add_formatter(Moon.formats.JsonIndented())

# Remove all formatters
moon.del_formatters()

# Log a message with DEBUG level
logger.debug(msg="Logging after removing formatters.")
  • Removing a Specific Formatter:
from moon.logger import Moon
from moon.formats import Formats

# Create an instance of Moon Logger with a file handler
moon = Moon(name="remove_formatter_logger", file_handler=True)
logger = moon.base_logger()

# Add two formatters
formatter1 = Formats.Table()
formatter2 = Formats.Json()

moon.add_formatter(formatter1)
moon.add_formatter(formatter2)

# Remove one of the formatters
moon.del_formatter(formatter1)

# Log a message with INFO level
logger.info(msg="Logging after removing one formatter.")
  • Conditional Logging Based on Environment:
from moon.logger import Moon
from moon.formats import Formats
import os

# Create an instance of Moon Logger with conditional file handler
enable_file_logging = os.environ.get("ENABLE_FILE_LOGGING", "False").lower() == "true"
logger = Moon(
    name="conditional_logger",
    file_handler=enable_file_logging,
    file_format=Formats.JsonIndented()
).base_logger()

# Log a message with INFO level
logger.info(msg="Conditional log message.")
  • Adding a custom file handler:
import logging
from moon.logger import Moon, LogLevel
from moon.formats import Formats

# Create an instance of the Moon logger
moon = Moon(
    file_handler=False,  # Set to True if you want to include a file handler
    stream_handler=False  # Set to True if you want to include a stream (console) handler
)

# Create a FileHandler with specific configuration
file_handler = logging.FileHandler(
    'moon.json',
    mode="a",
    encoding="utf-8",
    delay=False,
    errors=None
)

# Set the formatter for the FileHandler (e.g., JSON format)
file_handler.formatter = Formats.Json()

# Set the logging level for the FileHandler (e.g., DEBUG)
file_handler.setLevel(LogLevel.DEBUG)

# Add the custom handler to the Moon logger
moon.add_handler(handler=file_handler)

# Get Logger Instance
logger = moon.base_logger()

# Log Messages
logger.debug('Hello, Custom Handlers!')
  • Adding a custom stream handler:
import logging
from moon.logger import Moon, LogLevel
from moon.formats import Formats

# Create a Moon logger instance without default handlers
moon = Moon(file_handler=False, stream_handler=False)

# Create a StreamHandler
stream_handler = logging.StreamHandler()

# Set the formatter for the StreamHandler (e.g., GNU Logs format)
stream_handler.formatter = Formats.CLang()

# Set the logging level for the StreamHandler (e.g., DEBUG)
stream_handler.setLevel(LogLevel.DEBUG)

# Add the stream handler to the Moon logger
moon.add_handler(handler=stream_handler)

# Log Messages to Stream Handler
logger.debug('Hello, Custom Handlers!')

Metadata

Release files for moonlogger 0.9.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for moonlogger 0.9.5
File Size Uploaded Provenance Actions
moonlogger-0.9.5.tar.gz 9.6 kB Without provenance Details for moonlogger-0.9.5.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for moonlogger 0.9.5
File Interpreter ABI Platform Actions
moonlogger-0.9.5-py3-none-any.whl Python 3 none any Details for moonlogger-0.9.5-py3-none-any.whl

Total release size: 17.4 kB

Release files / moonlogger-0.9.5.tar.gz

Download URL moonlogger-0.9.5.tar.gz
Size 9.6 kB
Tags Source
SHA-256 checksum
How to use checksums
7761bb20dc5d5222e44affdbc7a028128cf611caaed523c8874340da07a3e0da
BLAKE2b-256 checksum
How to use checksums
827befdeec42c4716c2e70aebac0cfea04fc85967713187cc961f053411cbd1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.12

Release files / moonlogger-0.9.5-py3-none-any.whl

Download URL moonlogger-0.9.5-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a541f9c3db53400d14e84f6b3841f987564eb587af24c21ad00ae00934632345
BLAKE2b-256 checksum
How to use checksums
0566eae3f481ec019582e116b4903d66a36945aff72aaa13a2294c4ba5adbd4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.12

Security for moonlogger 0.9.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.9.5 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page