casual_logger
What a bother. Let's logging it without setting it.
Not for product use.
なんて面倒だ。 設定せず にロギングしましょう。
製品には向いていません。
Japanese before machine translation is attached.
機械翻訳する前の日本語を添えます。
Example 1
Can it be used without reading Example 2 and later?
Example 2 以降を読まなくても使えるかも?
Your code:
//! You can copy and paste and use immediately.
//! コピー&ペーストしてすぐに使用できます。
use Log;
Output ./default-2020-07-22.log.toml automatically generated:
[]
= 'Hello, world!!'
Example 2
Sometimes you want the logger to be quiet.
ロガーに静かにしていて欲しいときもありますね。
Your code:
//! There are 7 log levels.
//! ログレベルは7段階です。
use ;
Output ./default-2020-07-23.log.toml automatically generated:
[]
= 'The bath temperature is 44 degrees.'
[]
= 'The refrigerator is empty.'
[]
= 'Where did you put my train pass?'
[]
= "I haven't set an alarm clock."
Terminal:
thread 'main' panicked at 'I haven't set an alarm clock.', examples\example2.rs:16:5
stack backtrace:
0: backtrace::backtrace::trace_unsynchronized
...omitted...
Example 3
Is the log file TOML?
ログファイルはTOMLですか?
Your code:
//! TOML tables are typed maps.
//! TOMLのテーブルは型付きのマップだ。
use ;
Output ./today-s-plan-2020-07-22.log.toml automatically generated:
[]
= 'ShoppingToday'
= -7000
= '''
Buy shelves in the near month.
Replace the washing machine after a few years.
近い月に棚。
数年後に洗濯機買い替え。
'''
= -40000
= 190000
= -53000
= [ -63_000, -4_000, -10_000 ]
Example 4
We do not recommend making it complicated.
複雑にすることはお勧めしません。
Your code:
//! Tables are easier to see if they are not nested..
//! テーブルは入れ子にしない方が見やすいです。
use ;
Output ./complex-toml-2020-07-23.log.toml automatically generated:
[]
= 'ImInTrouble'
[[]]
= false
= 'Kitchen'
[[]]
= 'Bath'
= false
[[]]
= false
= 'Toilet'
[]
= 1
= 2
= 1
Example 5
What if someone else used 'casual_logger' in another library?
もし他のライブラリで誰かが 'casual_logger' を使っていたなら、
どうなるでしょうか?
Your code:
//! See how to override the settings.
//! 設定を上書きする方法を確認してください。
use ;
Output ./lesson1-2020-07-23.log.toml automatically generated:
[]
= 'This is an Application.'
= '.log.toml'
= 'lesson1'
= 'Info'
= 2
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.
- Write policy is one application, one log file.
書込み方針は、 1アプリケーション1ログファイル です。- Priority 1: First important log file.
優先順位1: 最初に重要指定したログ・ファイル。 - Priority 2: Last specified log file.
優先順位2: 最後に指定したログ・ファイル。
- Priority 1: First important log 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
Log::flush()for logging to complete at end of program. Log::flush()is a waiting time of 20 milli second or more before the logger ends.
- Don't forget
- (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.
//! すべての機能が1つのコピー&ペーストで説明されています。
use ;
Output ./tic-tac-toe-2020-07-23.log.toml automatically generated:
[]
= '''
Hello, world!!
こんにちわ、世界!!
'''
[]
= "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.'
[]
= 'ShoppingToday'
= 'A'
= -7000
= true
= '''
Buy shelves in the near month.
Replace the washing machine after a few years.
近い月に棚。
数年後に洗濯機買い替え。
'''
= -40000
= 190000
= 46.5
= -53000
= [ -63_000, -4_000, -10_000 ]
[]
= "I'm in trouble."
[[]]
= false
= 'Kitchen'
[[]]
= 'Bath'
= false
[[]]
= false
= 'Toilet'
[]
= 1
= 2
= 1
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
Your code:
use ;
At the timing of the first writing, a file with a
time stamp in its name is automatically generated.
Example of Log file name:
ログ・ファイル名の例:
tic-tac-toe-2020-07-22.log.toml
1---------- 3--------
2----------
1 Prefix 3 Extention
接頭辞 拡張子
2 StartDate
開始日
File name
| Part | Name | Description | Default |
|---|---|---|---|
./ |
file path | Working directory | |
| only. | |||
tic-tac-toe |
Prefix | Editable. | default |
-2020-07-22 |
StartDate | Auto generated. | |
.log.toml |
Extension | .log.toml or |
.log.toml |
.log. |
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.
.log 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 |
Your code:
Log rotation
Your code:
set_retention_days;
remove_old_logs;
Example:
retention_daysis 2.- Today is 2020-07-12.
- Call
Log::remove_old_logs()method. - The
./default-2020-07-09.log.tomlfile will be deleted. - The
./default-2020-07-10.log.tomlremains. - 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
Your 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. |
Your 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.
Your 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 |
|---|---|
.bool(key, value) |
Insert a boolean. |
.char(key, value) |
Insert a character. |
.float(key, value) |
Insert a float. |
.int(key, value) |
Insert a signed integer. |
.literal(key, value) |
Not enclose this value in |
| quotation marks. | |
| You can break the toml format. | |
| Do not validate. | |
.str(key, value) |
Insert a string. |
| Multi-line string are | |
| output with multiple lines. | |
.sub_t(key, table) |
Insert a sub table. |
.uint(key, value) |
Insert a unsigned integer. |
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.
Your code:
// TOML say a table. So-called map.
// Use table by '_t' suffix.
// TOMLのテーブルは、いわゆるマップです。
// '_t' を末尾に付けて、テーブルを使用します。
infoln_t;
Output:
[]
= """
The sky is from top to bottom!!
上から下まで空です!!\r\n
"""
= "fly in the sky."
= 2
= """
climb
a tall
tree.
"""
Don't forget flush for logging to complete at end of program
Your code:
// Wait for logging to complete or to timeout.
flush;
If you do not flush,
the program will exit before writing all the logs.
TODO
- Dogfooding.
- Japanese(Multi-byte string) support.
- More minimal.
- Remove deprecated features.
- 0.6.0
- Error handling check.
- Toml cover.
- Primitive type.
- Array.
- Dotted key support (Sub table only).
- Add '_important()' method.
Appendix
Customize method
Your code: main.rs
use ;
Usage: other.rs
use crateLogExt;