<commit_before>//!@todo: feature: verbosity filter from file.
//!@todo: swarm: implement logger_interface
//!@todo: thevoid: redirect json config.
//!@todo: files_t: Rotation condition.
//! Sample config:
/*!
Rotate by datetime:
"rotate": {
    "backups" 5,
    "pattern": "%(filename)s.log.%Y%M%d",
    "every": "d" [m, H, a, d, w, M, y]
}

Rotate both:
"rotate": {
    "backups" 5,
    "pattern": "%(filename)s.log.%N.%Y%M%d",
    "size": 1000000,
    "every": "d" [m, H, a, d, w, M, y]
}
*/

//!@todo: example: Make stdout/string example with demonstration of formatting other attribute.

//!@todo: benchmark: File logging comparing with boost::log.
//!@todo: benchmark: Socket logging with json.

//!@todo: files_t: Make file naming by pattern.
//!@todo: files_t: logrotate support - ability to handle signals to reopen current file (SIGHUP).

//!@todo: performance: Experiment with std::ostringstream or format library for performance check.
//!@todo: performance: Current naive implementation of timestamp formatter is suck and have large performance troubles. Fix it.

//!@todo: api: Make fallback logger. Make it configurable.
//!@todo: aux: Make internal exception class with attribute keeping, e.g. line, file or path.
//!@todo: api: Maybe squish repository_t::init and ::configure methods?
//!@todo: msgpack_t: Attribute mappings.
//!@todo: socket_t: Make asynchronous TCP backend.<commit_msg>Task reordering. Also some new tasks has been added.<commit_after>//!@todo: files_t: Rotation condition.
//! Sample config:
/*!
Rotate by datetime:
"rotate": {
    "backups" 5,
    "pattern": "%(filename)s.log.%Y%M%d",
    "every": "d" [m, H, a, d, w, M, y]
}

Rotate both:
"rotate": {
    "backups" 5,
    "pattern": "%(filename)s.log.%N.%Y%M%d",
    "size": 1000000,
    "every": "d" [m, H, a, d, w, M, y]
}
*/

//!@todo: api: Renaming repository methods.
//!@todo: stream_t: Implement stream sink.
//!@todo: example: Make stdout/string example with demonstration of formatting other attribute.

//!@todo: feature: Verbosity filter from file.
//!@todo: api: Ability to set global attribute mapper (?)
//!@todo: api: Microseconds support in timestamps.

//!@todo: benchmark: File logging comparing with boost::log.
//!@todo: benchmark: Socket logging with json.

//!@todo: files_t: Make file naming by pattern.
//!@todo: files_t: logrotate support - ability to handle signals to reopen current file (SIGHUP) (?).

//!@todo: performance: Experiment with std::ostringstream or format library for performance check.
//!@todo: performance: Current naive implementation of timestamp formatter is suck and have large performance troubles. Fix it.

//!@todo: api: Make fallback logger. Make it configurable.
//!@todo: aux: Make internal exception class with attribute keeping, e.g. line, file or path.
//!@todo: api: Maybe squish repository_t::init and ::configure methods?
//!@todo: msgpack_t: Attribute mappings.
//!@todo: socket_t: Make asynchronous TCP backend.
{'fraction_non_alphanumeric': 0.1552480593992575, 'fraction_numerical': 0.006074924063449207, 'mean_word_length': 4.154782608695652, 'pattern_counts': {'":': 14, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7019765', 'n_tokens_mistral': 1025, 'n_tokens_neox': 940, 'n_words': 358}