热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于rust:文盘Rust-给程序加个日志

日志是应用程序的重要组成部分。无论是服务端程序还是客户端程序都须要日志做为谬误输入或者业务记录。在这篇文章中,咱们联合[log4rs]([链接])聊聊rust程序

作者:贾世闻

日志是应用程序的重要组成部分。无论是服务端程序还是客户端程序都须要日志做为谬误输入或者业务记录。在这篇文章中,咱们联合[log4rs](https://github.com/estk/log4rs)聊聊rust 程序中如何应用日志。

[log4rs](https://github.com/estk/log4rs)相似java生态中的log4j,应用形式也很类似

log4rs中的基本概念

log4rs 的性能组件也由 appender 和 logger形成。

·appender

  负责向指定文件或控制台追加日志 

·logger

  蕴含多个 appender ,比方一条日志既要输入到控制台也要长久化到日志文件中,就能够在logger中同时绑定 ConsoleAppender 和 FileAppender 

log4rs 应用示例

·示例形容

  咱们须要在工程中记录系统日志和业务日志,别离记录在logs/sys.log 和 logs/business.log

·定义 appender 和 logger 并初始化

  代码地位 src/logger/logger.rs

   let sys_file = FileAppender::builder()
       .encoder(Box::new(PatternEncoder::new("{d} - {m}{n}")))
       .build("logs/sys.log")
       .unwrap();
   let business_file = FileAppender::builder()
       .encoder(Box::new(PatternEncoder::new("{d} - {m}{n}")))
       .build("logs/business.log")
       .unwrap();

   let stdout = ConsoleAppender::builder().build();

   let config = Config::builder()
       .appender(Appender::builder().build("stdout", Box::new(stdout)))
       .appender(Appender::builder().build("sys", Box::new(sys_file)))
       .appender(Appender::builder().build("business", Box::new(business_file)))
       .logger(
           Logger::builder()
               .appender("sys")
               .build("syslog", LevelFilter::Info),
       )
       .logger(
           Logger::builder()
               .appender("business")
               .build("businesslog", LevelFilter::Info),
       )
       .build(
           Root::builder()
               .appender("stdout")
               .appender("file_out")
               .build(LevelFilter::Info),
       )
       .unwrap();

   let _ = log4rs::init_config(config).unwrap();

代码中定义了 sys\_file 和 business\_file 两个FileAppender 别离用于像sys.log 和 business.log中追加日志。

config 中定义了两个logger 别离绑定 sys appender 和 business appender。

最初通过 init_config 初始化 log4rs。

 ·在程序中输入日志

   · 定义 uselog 命令及两个子命令,别离输出sys 日志和 business 日志。

      代码地位 src/cmd/cmdusedifflogger.rs

 pub fn new_use_sys_log_cmd() -> Command<'static> {
     clap::Command::new("syslog").about("append to syslog")
 }
 
 pub fn new_use_business_log_cmd() -> Command<'static> {
     clap::Command::new("businesslog").about("append to business log")
 }

·解析命令并输入日志

      代码地位 src/cmd/rootcmd.rs

  if let Some(ref log) = matches.subcommand_matches("uselog") {
      println!("use log");
      if let Some(_) = log.subcommand_matches("syslog") {
          log::info!(target:"syslog","Input sys log");
      }  
      if let Some(_) = log.subcommand_matches("businesslog") {
          log::info!(target:"businesslog","Input business log");
      }
  }

输入时,通过 target 来辨别输入到不同的logger。

本文代码的github地址:https://github.com/jiashiwen/&#8230;

下期见


推荐阅读
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 通过使用CodeIgniter的SMTP库,可以高效地发送电子邮件。以Gmail为例,注册Gmail账号后,使用其发送邮件的优势在于不易被标记为垃圾邮件。然而,需要注意的是,服务器必须支持SSL协议才能成功发送。对于其他邮件服务提供商,只需调整SMTP主机地址和端口号即可实现邮件发送。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有