singlog/README.md

153 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

![singlog](singlog.png)
[![license](https://img.shields.io/github/license/AlexanderZhirov/singlog.svg?sort=semver&style=for-the-badge&color=green)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
[![main](https://img.shields.io/badge/dynamic/json.svg?label=git.zhirov.kz&style=for-the-badge&url=https://git.zhirov.kz/api/v1/repos/dlang/singlog/tags&query=$[0].name&color=violet&logo=D)](https://git.zhirov.kz/dlang/singlog)
[![githab](https://img.shields.io/github/v/tag/AlexanderZhirov/singlog.svg?sort=semver&style=for-the-badge&color=blue&label=github&logo=D)](https://github.com/AlexanderZhirov/singlog)
[![dub](https://img.shields.io/dub/v/singlog.svg?sort=semver&style=for-the-badge&color=orange&logo=D)](https://code.dlang.org/packages/singlog)
[![linux](https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://www.linux.org/)
[![windows](https://img.shields.io/badge/Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white)](https://support.microsoft.com/en-US/windows)
![output](tests/terminal.png)
![output](tests/cmd.png)
# Singleton Logging Module
`singlog` is a singleton logging module written in the D programming language, designed to provide thread-safe, cross-platform logging with flexible output targets. It supports multiple log levels, configurable output destinations (syslog, console, file), and optional colored console output, making it a versatile tool for application logging.
## Features
- **Thread-Safety**: Utilizes a `Mutex` to ensure safe logging in multi-threaded applications.
- **Cross-Platform**: Works on both Windows (Event Log, console) and POSIX (syslog, console) systems.
- **Flexible Output Targets**: Supports logging to:
- System logs (syslog on POSIX, Event Log on Windows).
- Standard output (`stdout` for NOTICE and above, `stderr` for ERROR and below).
- Files (with configurable file paths).
- **Log Levels**: Seven configurable levels:
- `DEBUGGING` (highest priority)
- `ALERT`
- `CRITICAL`
- `ERROR`
- `WARNING`
- `NOTICE`
- `INFORMATION` (lowest priority)
- **Fluent Interface**: Provides a chaining API for easy configuration of output targets, log levels, and settings.
- **Colored Output**: Optional ANSI color support for console messages (on POSIX) or Windows console colors.
- **Singleton Design**: Ensures a single logger instance throughout the application, accessible via `Log.msg` or the `log` alias.
- **Aliases**: Short aliases (e.g., `d` for `debugging`, `e` for `error`) for concise logging.
## Installation
To use `singlog`, include it in your D project:
1. **Via Source**: Copy the `singlog.d` file into your projects source directory.
2. **Via DUB** (if packaged):
Add it to your `dub.json`:
```json
"dependencies": {
"singlog": "~>1.0.0"
}
```
## Usage
### Basic Configuration and Logging
The `singlog` module provides a singleton logger instance accessible via `Log.msg` or the global `log` alias. Heres a basic example:
```d
import singlog;
void main() {
// Configure the logger
log.program("MyApp") // Set program name for syslog/Event Log
.color(true) // Enable colored console output
.level(log.level.debugging) // Set minimum log level to DEBUGGING
.output(log.output.std.file.syslog) // Output to console, file, and syslog
.file("./myapp.log"); // Set log file path
// Log messages
log.debugging("Starting application in debug mode");
log.information("Initialization complete");
log.error("Failed to load resource");
}
```
This configures the logger to:
- Identify as "MyApp" in system logs.
- Use colored output on the console.
- Log all messages (from `DEBUGGING` up).
- Write to the console, a file (`myapp.log`), and the system log.
### Log Levels and Aliases
The logger supports seven log levels with corresponding methods and aliases:
| Level | Method | Alias | Description |
|---------------|-------------------|-------|------------------------------|
| `DEBUGGING` | `debugging()` | `d()` | Debugging information |
| `ALERT` | `alert()` | `a()` | High-priority alerts |
| `CRITICAL` | `critical()` | `c()` | Critical errors |
| `ERROR` | `error()` | `e()` | General errors |
| `WARNING` | `warning()` | `w()` | Warnings |
| `NOTICE` | `notice()` | `n()` | Notices |
| `INFORMATION` | `information()` | `i()` | Informational messages |
Example using aliases:
```d
log.d("Debug message");
log.i("Info message");
log.e("Error message");
```
### Output Targets
Output targets can be configured using the `output()` method and its fluent interface:
- `syslog()`: Logs to the system log (Event Log on Windows, syslog on POSIX).
- `std()`: Logs to the console (`stdout` or `stderr` based on log level).
- `file()`: Logs to a file (requires `file()` to set the path).
Example:
```d
log.output(log.output.std.file); // Console and file output
log.i("This goes to console and file");
```
### Temporary Output Override
Use `now()` to temporarily override output targets for the next log call:
```d
log.now(log.output.std).n("This goes only to console");
log.i("This uses default outputs again");
```
### Colored Output
Enable colored output with `color(true)`:
```d
log.color(true);
log.w("This warning will be yellow on POSIX or Windows");
log.c("This critical message will be magenta");
```
Colors differ by platform:
- **POSIX**: Uses ANSI escape codes (e.g., green for `DEBUGGING`, red for `ERROR`).
- **Windows**: Uses console color attributes (e.g., yellow for `WARNING`, white for `INFORMATION`).
### File Logging
Set a log file with `file()`:
```d
log.file("app.log");
log.e("This error goes to app.log");
```
The file is opened in append mode (`"a+"`) and includes timestamps.