# Benchmarks
[The tracking page] for benchmark changes for each commit during development.
Run `cargo +nightly bench --features multi-thread` in the root directory of this repository for benchmarking.
The following results are generated on `Windows 10 64 bit` and `Intel i9-10900KF CPU @ 3.70GHz` with `cargo 1.83.0-nightly (ad074abe3 2024-10-04)`.
### `spdlog-rs` (0.4.0)
- Default features
```
test bench_1_file ... bench: 163.62 ns/iter (+/- 11.70)
test bench_2_file_async ... bench: 214.90 ns/iter (+/- 16.04)
test bench_3_rotating_file_size ... bench: 184.23 ns/iter (+/- 31.93)
test bench_4_rotating_daily ... bench: 170.50 ns/iter (+/- 10.23)
test bench_5_level_off ... bench: 1.60 ns/iter (+/- 0.08)
```
- Enable `flexible-string` feature
```
test bench_1_file ... bench: 143.55 ns/iter (+/- 7.91)
test bench_2_file_async ... bench: 215.43 ns/iter (+/- 12.25)
test bench_3_rotating_file_size ... bench: 162.22 ns/iter (+/- 21.09)
test bench_4_rotating_daily ... bench: 146.32 ns/iter (+/- 8.46)
test bench_5_level_off ... bench: 1.23 ns/iter (+/- 0.02)
```
Compared with other Rust crates
#### Disclaimer
I'm not entirely familiar with using the other Rust crates below, so if you find a bug or something worth improving in the benchmark code, feel free to open an issue to let me know.
### `tracing` (0.1.40)
```
test bench_1_file ... bench: 2,316.25 ns/iter (+/- 107.55)
test bench_2_file_async ... bench: 603.70 ns/iter (+/- 24.70)
test bench_3_rotating_file_size ... unavailable
test bench_4_rotating_daily ... bench: 2,373.32 ns/iter (+/- 97.30)
test bench_5_level_off ... bench: 0.41 ns/iter (+/- 0.00)
```
### `slog` (2.7.0)
```
test bench_1_file ... unavailable
test bench_2_file_async ... bench: 467.90 ns/iter (+/- 4.56)
test bench_3_rotating_file_size_async ... bench: 472.49 ns/iter (+/- 17.81)
test bench_4_rotating_daily ... unavailable
test bench_5_level_off ... bench: 1.81 ns/iter (+/- 0.14)
```
### `flexi_logger` (0.29.2)
```
test bench_1_file ... bench: 1,181.17 ns/iter (+/- 97.06)
test bench_2_file_async ... unavailable
test bench_3_rotating_file_size ... bench: 1,192.97 ns/iter (+/- 44.88)
test bench_4_rotating_daily ... bench: 1,587.54 ns/iter (+/- 59.07)
test bench_5_level_off ... bench: 0.20 ns/iter (+/- 0.01)
```
### `log4rs` (1.3.0)
```
test bench_1_file ... bench: 2,882.34 ns/iter (+/- 85.30)
test bench_2_file_async ... unavailable
test bench_3_rotating_file_size ... bench: 2,990.95 ns/iter (+/- 189.15)
test bench_4_rotating_daily ... unavailable
test bench_5_level_off ... bench: 0.20 ns/iter (+/- 0.01)
```
### `fern` (0.6.2)
```
test bench_1_file ... bench: 2,896.02 ns/iter (+/- 259.27)
test bench_2_file_async ... unavailable
test bench_3_rotating_file_size ... unavailable
test bench_4_rotating_daily ... unavailable
test bench_5_level_off ... bench: 0.20 ns/iter (+/- 0.02)
```
### `ftlog` (0.2.14)
```
test bench_1_file ... unavailable
test bench_2_file_async ... bench: 254.47 ns/iter (+/- 16.07)
test bench_3_rotating_file_size ... unavailable
test bench_4_rotating_daily ... bench: 253.33 ns/iter (+/- 19.89)
test bench_5_level_off ... bench: 0.20 ns/iter (+/- 0.01)
```
### `fast_log` (1.7.4)
```
test bench_1_file ... unavailable
test bench_2_file_async ... bench: 249.25 ns/iter (+/- 2,917.45)
test bench_3_rotating_file_size_async ... bench: 270.89 ns/iter (+/- 753.87)
test bench_4_rotating_daily_async ... bench: 640.79 ns/iter (+/- 543.36)
test bench_5_level_off ... bench: 0.20 ns/iter (+/- 0.02)
```
Compared with C++ spdlog
### `spdlog-rs` (0.4.0)
- Default features (corresponds to C++ `spdlog` using standard ``)
- Sync
```
[info] **********************************************************************
[info] Multi threaded: 1 threads, 250000 messages
[info] **********************************************************************
[info] basic_mt Elapsed: 0.07 secs 3748502/sec
[info] rotating_mt Elapsed: 0.07 secs 3790491/sec
[info] daily_mt Elapsed: 0.07 secs 3815902/sec
[info] level-off Elapsed: 0.00 secs 488949735/sec
[info] **********************************************************************
[info] Multi threaded: 4 threads, 250000 messages
[info] **********************************************************************
[info] basic_mt Elapsed: 0.05 secs 5542241/sec
[info] rotating_mt Elapsed: 0.06 secs 4130975/sec
[info] daily_mt Elapsed: 0.06 secs 4545066/sec
[info] level-off Elapsed: 0.00 secs 550055005/sec
```
- Async
```
[info] --------------------------------------------
[info] Messages : 1000000
[info] Threads : 10
[info] Queue : 8192 slots
[info] Queue memory : 8192 x 112 = 896 KB
[info] Total iters : 3
[info] --------------------------------------------
[info]
[info] ********************************************
[info] Queue Overflow Policy: Block
[info] ********************************************
[info] Elapsed: 0.4002621 secs 2498362/sec
[info] Elapsed: 0.3905976 secs 2560179/sec
[info] Elapsed: 0.3966882 secs 2520871/sec
[info]
[info] ********************************************
[info] Queue Overflow Policy: DropIncoming
[info] ********************************************
[info] Elapsed: 0.0832805 secs 12007612/sec
[info] Elapsed: 0.0836786 secs 11950486/sec
[info] Elapsed: 0.0828995 secs 12062798/sec
```
- Enable `flexible-string` feature (corresponds to C++ `spdlog` using `fmt` library)
- Sync
```
[info] **********************************************************************
[info] Multi threaded: 1 threads, 250000 messages
[info] **********************************************************************
[info] basic_mt Elapsed: 0.06 secs 4402175/sec
[info] rotating_mt Elapsed: 0.06 secs 4045543/sec
[info] daily_mt Elapsed: 0.06 secs 4188222/sec
[info] level-off Elapsed: 0.00 secs 442243056/sec
[info] **********************************************************************
[info] Multi threaded: 4 threads, 250000 messages
[info] **********************************************************************
[info] basic_mt Elapsed: 0.05 secs 4885541/sec
[info] rotating_mt Elapsed: 0.06 secs 4344448/sec
[info] daily_mt Elapsed: 0.06 secs 4350549/sec
[info] level-off Elapsed: 0.00 secs 514721021/sec
```
- Async
```
[info] --------------------------------------------
[info] Messages : 1000000
[info] Threads : 10
[info] Queue : 8192 slots
[info] Queue memory : 8192 x 112 = 896 KB
[info] Total iters : 3
[info] --------------------------------------------
[info]
[info] ********************************************
[info] Queue Overflow Policy: Block
[info] ********************************************
[info] Elapsed: 0.380146 secs 2630568/sec
[info] Elapsed: 0.3686135 secs 2712868/sec
[info] Elapsed: 0.3628417 secs 2756022/sec
[info]
[info] ********************************************
[info] Queue Overflow Policy: DropIncoming
[info] ********************************************
[info] Elapsed: 0.0852181 secs 11734596/sec
[info] Elapsed: 0.0864404 secs 11568664/sec
[info] Elapsed: 0.0889495 secs 11242334/sec
```
### C++ `spdlog` (1.14.1)
Compiler `MSVC 19.41.34120.0`.
- Using standard ``
(compiled with `cmake -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DSPDLOG_BUILD_BENCH=ON -DSPDLOG_BUILD_EXAMPLE=OFF -DSPDLOG_USE_STD_FORMAT=ON`)
- Sync
```
[info] **************************************************************
[info] Multi threaded: 1 threads, 250,000 messages
[info] **************************************************************
[info] basic_mt Elapsed: 0.12 secs 2,057,294/sec
[info] rotating_mt Elapsed: 0.13 secs 1,878,038/sec
[info] daily_mt Elapsed: 0.12 secs 2,051,127/sec
[info] level-off Elapsed: 0.00 secs 151,515,151/sec
[info] **************************************************************
[info] Multi threaded: 4 threads, 250,000 messages
[info] **************************************************************
[info] basic_mt Elapsed: 0.18 secs 1,387,633/sec
[info] rotating_mt Elapsed: 0.18 secs 1,355,687/sec
[info] daily_mt Elapsed: 0.19 secs 1,347,550/sec
[info] level-off Elapsed: 0.00 secs 148,086,719/sec
```
- Async
```
[info] -------------------------------------------------
[info] Messages : 1000000
[info] Threads : 10
[info] Queue : 8192 slots
[info] Queue memory : 8192 x 176 = 1408 KB
[info] Total iters : 3
[info] -------------------------------------------------
[info]
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 2.8654663 secs 348983/sec
[info] Elapsed: 2.8504903 secs 350816/sec
[info] Elapsed: 2.8458098 secs 351393/sec
[info]
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 1.8782355 secs 532414/sec
[info] Elapsed: 1.8402441 secs 543406/sec
[info] Elapsed: 1.8303429 secs 546345/sec
```
- Using `fmt` library
(compiled with `cmake -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DSPDLOG_BUILD_BENCH=ON -DSPDLOG_BUILD_EXAMPLE=OFF`)
- Sync
```
[info] **************************************************************
[info] Multi threaded: 1 threads, 250,000 messages
[info] **************************************************************
[info] basic_mt Elapsed: 0.07 secs 3,503,397/sec
[info] rotating_mt Elapsed: 0.08 secs 3,310,394/sec
[info] daily_mt Elapsed: 0.08 secs 3,160,360/sec
[info] level-off Elapsed: 0.00 secs 138,881,173/sec
[info] **************************************************************
[info] Multi threaded: 4 threads, 250,000 messages
[info] **************************************************************
[info] basic_mt Elapsed: 0.12 secs 2,091,563/sec
[info] rotating_mt Elapsed: 0.13 secs 1,886,654/sec
[info] daily_mt Elapsed: 0.13 secs 1,891,844/sec
[info] level-off Elapsed: 0.00 secs 139,883,616/sec
```
- Async
```
[info] -------------------------------------------------
[info] Messages : 1000000
[info] Threads : 10
[info] Queue : 8192 slots
[info] Queue memory : 8192 x 432 = 3456 KB
[info] Total iters : 3
[info] -------------------------------------------------
[info]
[info] *********************************
[info] Queue Overflow Policy: block
[info] *********************************
[info] Elapsed: 2.5994468 secs 384697/sec
[info] Elapsed: 2.6129828 secs 382704/sec
[info] Elapsed: 2.6062268 secs 383696/sec
[info]
[info] *********************************
[info] Queue Overflow Policy: overrun
[info] *********************************
[info] Elapsed: 1.8697969 secs 534817/sec
[info] Elapsed: 1.8636448 secs 536582/sec
[info] Elapsed: 1.8804087 secs 531799/sec
```
[The tracking page]: https://spriteovo.github.io/spdlog-rs/dev/benchmarks/