Log78 is a flexible Python logging library that supports console, file, and server logging.
Install Log78 using pip:
pip install log78
Log78 provides two ways to log messages: a simple method for quick logging and a more detailed method using LogEntry objects. Here's how to get started with the simple method:
from log78 import Log78
# Get the Log78 instance - no setup required!
log = Logger78.instance()
# Log a simple message
await log.INFO("Hello, Log78!")
# Log with a summary and custom level
await log.WARN("This is a warning", "Warning Summary", 60)For more detailed logging, you can use the LogEntry object:
from log78 import LogEntry, BasicInfo
log_entry = LogEntry(basic=BasicInfo(message="Detailed log message", summary="Log Summary"))
await log.INFO(log_entry)Both methods are ready to use out of the box with default console and file logging.
If you need custom logging behavior, you can use the setup method:
from log78 import Logger78. ServerLog78, FileLog78, ConsoleLog78
# Create custom logger instances if needed
server_logger = ServerLog78()
file_logger = FileLog78("custom_logfile")
console_logger = ConsoleLog78()
# Setup custom loggers
log = Logger78.instance()
log.setup(server_logger, file_logger, console_logger)- debug_kind: A set of log debugging keywords used to control which types of logs are recorded.
- level_file,- level_console,- level_api: Respectively represent the threshold levels for file logs, console logs, and API logs.
- debug_entry: Used to set more fine-grained debugging conditions.
- DEBUG (10): Detailed debug information, typically used only in development environments
- INFO (30): General information, can be used to track normal application operations
- WARN (50): Warning information, indicating potential issues but not affecting main functionality
- ERROR (60): Errors and serious problems that require immediate attention
from log78 import Logger78. LogEntry, BasicInfo
log = Logger78.instance()
# Adjust console log level to 0 to print all logs (for debugging)
log.level_console = 0
# Adjust file log level to 60 to only record more severe warnings and errors
log.level_file = 60
# Using different levels to record logs
log_entry = LogEntry(basic=BasicInfo(message="Debug information"))
await log.DEBUG(log_entry)  # Will only output to console
log_entry.basic.message = "General information"
await log.INFO(log_entry)  # Will output to console, not recorded in file
log_entry.basic.message = "Warning"
await log.WARN(log_entry)  # Will be recorded in both console and file
log_entry.basic.message = "Error"
await log.ERROR(log_entry)  # Will be recorded in console, file, and API- DEBUG,- INFO,- WARN,- ERROR: Record logs of different levels.
- ERROR(Exception, LogEntry): Records exception error logs.
The LogEntry class provides structured information for detailed logging:
from log78 import Logger78. LogEntry, BasicInfo, EventInfo, HttpInfo
log_entry = LogEntry()
log_entry.basic = BasicInfo(
    summary="User login successful",
    log_level_number=30,
    log_level="INFO",
    message="User johndoe successfully logged into the system",
    service_name="AuthService",
    user_id="user123",
    user_name="johndoe"
)
log_entry.event = EventInfo(
    event_category="authentication",
    event_action="login",
    event_outcome="success"
)
log_entry.http = HttpInfo(
    http_request_method="POST",
    http_request_body_content="{\"username\":\"johndoe\",\"password\":\"*****\"}",
    http_response_status_code=200,
    url_original="https://api.example.com/login"
)
# Add custom properties
log_entry.add_property("customField", "customValue")
await log.INFO(log_entry)For more detailed information, please refer to the project's GitHub repository or the API documentation.