Il implémente l'interface log qui est l'équivalent de SLF4J de Java/Kotlin mais pour Rust.
Il a la particularité de pouvoir se configurer directement dans le code en plus de fichier Yaml :
use log::LevelFilter;
use log4rs::append::console::ConsoleAppender;
use log4rs::append::file::FileAppender;
use log4rs::encode::pattern::PatternEncoder;
use log4rs::config::{Appender, Config, Logger, Root};
fn main() {
let stdout = ConsoleAppender::builder().build();
let requests = FileAppender::builder()
.encoder(Box::new(PatternEncoder::new("{d} - {m}{n}")))
.build("log/requests.log")
.unwrap();
let config = Config::builder()
.appender(Appender::builder().build("stdout", Box::new(stdout)))
.appender(Appender::builder().build("requests", Box::new(requests)))
.logger(Logger::builder().build("app::backend::db", LevelFilter::Info))
.logger(Logger::builder()
.appender("requests")
.additive(false)
.build("app::requests", LevelFilter::Info))
.build(Root::builder().appender("stdout").build(LevelFilter::Warn))
.unwrap();
let handle = log4rs::init_config(config).unwrap();
// use handle to change logger configuration at runtime
}
Et sa façade log reprend l'API de SLF4J mais sous forme de macros :
let world = "World";
trace!("Hello {}!", world);
debug!("Hello {}!", world);
info!("Hello {}!", world);
warn!("Hello {}!", world);
error!("Hello {}!", world);
À voir pour les performances, mais l'idée de reprendre l'API d'une façade qui a fait ses preuves pour y coller l'implémentation que l'on veut derrière est la bienvenue !
Un tuto simple parlant de l''injection CRLF avec les loggers en Kotlin/Java.
Penser à ajouter la dépendance suivante pour se prémunir de cela avec LogBack :
<dependency>
<groupId>org.owasp</groupId>
<artifactId>security-logging-logback</artifactId>
<version>1.1.6</version>
</dependency>
(à voir avec ce que propose la 1.4.4 de LogBack sortie récemment).
Edit
Une autre façon de se protéger du problème est de se servir de la fonction replace de logback en lui demandant d'effectuer un search & replace de tous les caractères de type CR/LF by une chaîne connue (ici {EOL}) qui permettra de détecter l'injection de nouvelles lignes dans les logs :
<included>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%replace(%msg){'[\r\n]', '{EOL}'}</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</included>
Une lib Java rikiki de 153 Ko permet d'écrire des logs plus rapidement qu'avec LogBack ou Log4J2 et qui implémente les interfaces de SLF4J. #Nice
Apparemment, Log4j2 utiliser l'API I/O asynchone de Java8 ce qui le rendrait plus rapide que logback. L'article dresse une comparaison de ces deux frameworks.
Edit : Une fois que la file asynchrone de log4j2 est pleine, ses performances se dégradent bien en dessous de celles de logback.
Du tuning s'impose alors, source Stack Overflow.
Du tuning de conf et plein de benchmark avec logback
Remplacer ce fichu template de log que NetBeans utilise lorsqu'il insère des try-catch ! (ENFIN, CA FAIT UN PAQUET D'ANNEE QUE J'ATTENDAIS CETTE INFO WHOUHOU)
Un article vers Sebsauvage sur ce que fait Windows 10.
En résumé :
- Vous allumez votre webcam et systématiquement, les premiers 35 Mo sont envoyés à Microsoft.
- Votre microphone vous place sur écoute en permanence même l'application éteinte.
- TOUT ce que vous tapez sur votre clavier, y compris votre numéro de carte bleu, votre mot de passe GMail, Facebook, Twitter ou encore votre identifiant de compte bancaire, des impôts, d'assurance maladie bref TOUT est stocké dans un fichier puis envoyé toutes les 30 minutes à Microsoft.
- Toutes les recherches que vous faites, qu'elles soient locales ou sur internet sont envoyées à Microsoft. Ce qui implique, ce que vous regardez/écoutez/lisez et pendant combien de temps aussi.
Ça veut aussi dire que toutes les photos coquines que vous envoyez à votre copain, ou messieurs vos "dick pics" ou en bon français les photos de votre pénis que vous envoyez à votre copine pour vous marrer, sont également transmises et stockées chez Microsoft.
Franchement... C'est moi où le fait que cette entreprise le fasse, mais qu'en plus qu'elle l'admette sans sourciller fait fortement penser à du Big Brother ?
J'ai PEUR ! Il faut ÉDUQUER les gens autour de nous, il faut agir comme des virus et si vous êtes un développeur de logiciels libres, arrêtez tout simplement de coder pour les plate-formes propriétaires/privatrices. C'est contribuer à envenimer les choses, c'est offrir du bois à l'autel brûlant de la surveillance de masse, du viol de la vie privée, de la répression et la privation des libertés individuelles.
Je l'ai déjà dit, stocker votre intimité ne sert qu'à une seule chose : pouvoir faire pression sur vous ou sur vos proches plus tard !