casual_logger
This logger with few settings to repeat practice of many programming tutorials.
Not for product use.
Example 1
Code:
//! You can copy and paste and use immediately.
use Log;
Output default-2020-07-17.log.toml
automatically generated:
[]
= "Hello, world!!"
Example 2
Code:
//! You can copy and paste and use immediately.
use ;
Output lesson1-2020-07-17.log.toml
automatically generated:
[]
= "Result"
= "Mountain"
= """
Hell, world!!
こんにちわ、世界!!
"""
= [ 800, 300, 500 ]
= "A"
= "Rain"
Abstract
The concept used by beginners.
1. Used in one example, throw away
- There is no configuration file.
- Rotate log by date automatically.
- Delete old log files. (semi-automatic)
- Log files can only be placed in the working directory.
- Only write to 1 file.
2. Human readable log
- TOML does not spoil it.
3. Possibility as a tutorial
- Short introduction.
- Write the log as a TOML table, it can be easily parsed.
Disclaim
- (1) In trade off for processing speed:
- Don't forget wait for logging to complete at end of program.
- There is a waiting time of 20 milli second or more before the logger ends.
- (2) In trade off for ease of introduction:
- You can break the toml format. Do not validate.
- (3) In trade off for intelligence suggestion by text editor:
- It differs from the standard Rust log interface.
- (4) In trade off for not stopping running:
- If the log export fails, the error is ignored.
Tested environment
- OS:
Windows 10
. - Editor:
Visual studio code
.
At first, Overall view
Your code:
//! All features are described in one copy and paste.
use ;
Output ./tic-tac-toe-2020-07-17.log.toml
auto generated:
[]
= """
Hello, world!!
こんにちわ、世界!!\r\n
"""
[]
= "x is 100.\r\n"
[]
= "( 1)TRACE"
[]
= "( 2)trace-line\r\n"
[]
= "( 3)DEBUG"
[]
= "( 4)debug-line\r\n"
[]
= "( 5)INFO"
[]
= "( 6)info-line\r\n"
[]
= "( 7)NOTICE"
[]
= "( 8)notice-line\r\n"
[]
= "( 9)WARN"
[]
= "(10)warn-line\r\n"
[]
= "(11)ERROR"
[]
= "(12)error-line\r\n"
[]
= "(13)FATAL"
[]
= "(14)fatal-line\r\n"
[]
= "(7)Trace on (7)Trace."
[]
= "(6)Debug on (7)Trace."
[]
= "(5)Info on (7)Trace."
[]
= "(4)Notice on (7)Trace."
[]
= "(3)Warn on (7)Trace."
[]
= "(2)Error on (7)Trace."
[]
= "(1)Fatal on (7)Trace."
[]
= "(6)Debug on (6)debug."
[]
= "(5)Info on (6)debug."
[]
= "(4)Notice on (6)debug."
[]
= "(3)Warn on (6)debug."
[]
= "(2)Error on (6)debug."
[]
= "(1)Fatal on (6)debug."
[]
= "(5)Info on (5)Info."
[]
= "(4)Notice on (5)Info."
[]
= "(3)Warn on (5)Info."
[]
= "(2)Error on (5)Info."
[]
= "(1)Fatal on (5)Info."
[]
= "(4)Notice on (4)Notice."
[]
= "(3)Warn on (4)Notice."
[]
= "(2)Error on (4)Notice."
[]
= "(1)Fatal on (4)Notice."
[]
= "(3)Warn on (3)Warn."
[]
= "(2)Error on (3)Warn."
[]
= "(1)Fatal on (3)Warn."
[]
= "(2)Error on (2)Error."
[]
= "(1)Fatal on (2)Error."
[]
= "(1)Fatal on (1)Fatal."
[]
= """
The sky is from top to bottom!!
上から下まで空です!!
"""
= "fly in the sky."
= "I'm thinking of another way."
= "fly in the sky."
= 2
= """
climb
a tall
tree.
"""
Output to terminal:
casual_logger: 0 sec(s). 15 table(s) left.
casual_logger: 0 sec(s). 1 table(s) left.
casual_logger: 0 sec(s). 7 table(s) left.
casual_logger: 0 sec(s). 6 table(s) left.
casual_logger: 0 sec(s). 5 table(s) left.
casual_logger: 0 sec(s). 4 table(s) left.
casual_logger: 0 sec(s). 3 table(s) left.
casual_logger: 0 sec(s). 2 table(s) left.
casual_logger: 0 sec(s). 1 table(s) left.
casual_logger: 0 sec(s). 1 table(s) left.
It is designed to use Log::fatal()
as the first argument for panic!()
. It is the abnormal termination of the program. There is a waiting time.
At second, 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
File name
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.
Extension:
Enum | String | Description | Default |
---|---|---|---|
Log |
.log |
For logs that are too large | |
to be colored in the editor. | |||
LogToml |
.log.toml |
Toml format. | Default |
Set up, Code:
Log rotation
Code:
;
remove_old_logs;
set_retention_days
Example:
retention_days
is 2.- Today is 2020-07-12.
- Call
Log::remove_old_logs()
method. - 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.
Name | Description | Default |
---|---|---|
retention_days |
After this number of days, | 7 |
the file will be deleted. |
Log level
Code:
;
set_level
Name | Description | Default |
---|---|---|
level |
Used to switch between | Trace |
write and non-write. |
Example:
- 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;
A piece of advice.
// Fatal is Panic! Can be used as the first argument of.
panic!;
Fatal returns a string so you can try to record a panic message.
However, the last log may not be written if the program exits first.
See also: Log::set_timeout_secs() method.
Code:
// Wait for seconds logging to complete.
// By default it's set to 30 seconds,
// so you probably don't need to set it.
set_timeout_secs;
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 or to timeout.
wait;
If you do not wait,
the program will exit before writing all the logs.
TODO
- Dogfooding.
- Japanese(Multi-byte string) support.
- More minimal.
- Remove deprecated features.
- Error handling check.
- Dotted key support (is difficult).
Appendix
Customize method
Code: main.rs
use ;
Usage: other.rs
use crate LogExt;