casual_logger
This logger is intended to be easy to explain when teaching other example programs to friends.
Not for you, for self-study of beginner friends.
Of course you can use it.
Not for production, but better than not logging.
- Only write to 1 file on working directory.
- Rotate by date.
- Delete old files.
At first, Disclaim
- It differs from the standard Rust log interface.
- Ignore performance for ease of use and ease of explanation.
- You can break the toml format. Do not validate.
- The writing order is unstable. Check the serial "Seq" number.
- If the log export fails, the error is ignored and it continues.
- Don't forget wait for logging to complete at end of program.
At second, Overall view
Your code:
use ;
Output ./default-2020-07-13.log.toml
auto generated:
[]
= "x is 100.\r\n"
[]
= "(2)Error on (7)Trace.\r\n"
[]
= "(4)Notice on (5)Info.\r\n"
[]
= "(4)Notice on (6)debug.\r\n"
[]
= "(4)Notice on (7)Trace.\r\n"
[]
= "(5)Info on (6)debug.\r\n"
[]
= "(3)Warn on (7)Trace.\r\n"
[]
= "(3)Warn on (6)debug.\r\n"
[]
= "(2)Error on (6)debug.\r\n"
[]
= "(1)Fatal on (6)debug.\r\n"
[]
= "(5)Info on (5)Info.\r\n"
[]
= "(1)Fatal on (7)Trace.\r\n"
[]
= "(3)Warn on (5)Info.\r\n"
[]
= "H,\r\n"
[]
= "Remove 0 files.\r\n"
[]
= "(2)Error on (5)Info.\r\n"
[]
= "(1)Fatal on (5)Info.\r\n"
[]
= "(4)Notice on (4)Notice.\r\n"
[]
= "B,\r\n"
[]
= "(3)Warn on (4)Notice.\r\n"
[]
= "(2)Error on (4)Notice.\r\n"
[]
= "(1)Fatal on (4)Notice.\r\n"
[]
= "(3)Warn on (3)Warn.\r\n"
[]
= "(2)Error on (3)Warn.\r\n"
[]
= "(1)Fatal on (3)Warn.\r\n"
[]
= "(1)Fatal on (2)Error.\r\n"
[]
= "(2)Error on (2)Error.\r\n"
[]
= "(1)Fatal on (1)Fatal.\r\n"
[]
= """
Hello, world!!
こんにちわ、世界!!\r\n
"""
[]
= "I,"
[]
= "L,\r\n"
[]
= "G,"
[]
= "D,\r\n"
[]
= "E,"
[]
= "C,"
[]
= "K,"
[]
= "J,\r\n"
[]
= "N!\r\n"
[]
= "F,\r\n"
[]
= "(7)Trace on (7)Trace.\r\n"
[]
= "A,"
[]
= "(6)Debug on (7)Trace.\r\n"
[]
= "M,"
[]
= "(6)Debug on (6)debug.\r\n"
[]
= """
The sky is from top to bottom!!
上から下まで空です!!\r\n
"""
= "fly in the sky."
= 2
= """
climb
a tall
tree.
"""
[]
= "(5)Info on (7)Trace.\r\n"
At third, Description
Code:
use ;
At the timing of the first writing, a file with a
time stamp in its name is automatically generated.
For example: ./tic-tac-toe-2020-07-12.log.toml
Description:
Part | Name | Description | Default |
---|---|---|---|
./ |
file path | Working directory | |
only. | |||
tic-tac-toe |
Prefix | Editable. | default |
-2020-07-12 |
StartDate | Auto generated. | |
.log |
Suffix | Editable. | .log |
.toml |
Extension | Editable. | .toml |
It is difficult to explain the file path for beginners.
Therefore, it does not move.
Excite yourself with a prefix.
StartDate is basically today.
If the rotation fails, it is the start date.
Suffix to be safe, include a word that
clearly states that you can delete the file.
If you don't like the .toml extension, leave
the suffix empty and the .log extension.
Set up, Code:
Log rotation, Code:
let remove_num = if let Ok = LOGGER.lock else ;
noticeln;
Logger Properties
Name | Description | Default |
---|---|---|
retention_days |
After this number of days, | 7 |
the file will be deleted. | ||
level |
Used to switch between | Trace |
write and non-write. |
Example of retention_days:
retention_days
is 2.- Today is 2020-07-12.
- The
./default-2020-07-09.log.toml
file will be deleted. - The
./default-2020-07-10.log.toml
remains. - Delete old files by date in filename.
Example of level:
- There are 7 log levels.
|Fatal< Error < Warn < Notice < Info < Debug <Trace|
|<-- Small ------------------------------ Large -->|
|<-- Concise -------------------------- Verbose -->|
|<-- Low Level --------------------- High level -->|
|<-- High priority --------------- Low priority -->|
Level | Examle of use. |
---|---|
Fatal |
If the program cannot continue. |
Error |
I didn't get the expected result, |
so I'll continue with the other method. | |
Warn |
It will be abnormal soon, |
but there is no problem and you can ignore it. | |
For example: | |
(1) He reported that it took longer to access | |
than expected. | |
(2) Report that capacity is approaching the limit. | |
Notice |
It must be enabled in the server production |
environment. | |
Record of passing important points correctly. | |
We are monitoring that it is working properly. | |
Info |
Report highlights. |
Everything that needs to be reported regularly in | |
the production environment. | |
Debug |
It should be in a place with many accidents. |
This level is disabled in production environments. | |
Leave it in the source and enable it for | |
troubleshooting. | |
Often, this is the production level of a desktop | |
operating environment. | |
Trace |
Not included in the distribution. |
Remove this level from the source after using it | |
for debugging. | |
If you want to find a bug in the program, | |
write a lot. |
Code:
// Multi-line string.
// The suffix "ln" adds a newline at the end.
infoln;
// After explicitly checking the level.
if enabled
// The level is implicitly confirmed.
trace;
traceln;
debug;
debugln;
info;
infoln;
notice;
noticeln;
warn;
warnln;
error;
errorln;
fatal;
fatalln;
Usage of Table
Static method | Description |
---|---|
::default() |
Create a instance. |
Instance method | Description |
---|---|
.str(key, value) |
Insert a string. |
Multi-line string are | |
output with multiple lines. | |
.literal(key, value) |
Not enclose this value in |
quotation marks. | |
You can break the toml format. | |
Do not validate. |
Do not include spaces in the key. TOML collapses.
It is difficult to explain to beginners how to use TOML.
If you make a TOML that cannot be parsed literally,
please correct it.
Code:
// Suffix '_t'. TOML say a table. So-called map.
infoln_t;
Output:
[]
= """
The sky is from top to bottom!!
上から下まで空です!!\r\n
"""
= "fly in the sky."
= 2
= """
climb
a tall
tree.
"""
Don't forget wait for logging to complete at end of program
Code:
// Wait for logging to complete. Time out 30 seconds.
wait_for_logging_to_complete;
If you do not wait,
the program will exit before writing all the logs.
TODO
- Output a stable log order.
Tested environment
- OS:
Windows 10
. - Editor:
Visual studio code
.
Appendix
Customize method
Code: main.rs
use Log;
Usage: other.rs
use crate LogExt;