首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

rust slog打印调用位置(源文件名和行号)

rust slog是一个用于日志记录的库,它提供了一种简单且灵活的方式来记录应用程序的运行状态和调试信息。slog库支持在日志中打印调用位置(源文件名和行号),以便更好地定位和调试问题。

要在rust slog中打印调用位置,可以使用slog的info!debug!error!等宏来记录日志。这些宏可以接受一个格式化字符串和其他参数,类似于println!宏。为了打印调用位置,我们可以使用slog的record_location!宏来获取当前的源文件名和行号,并将其作为参数传递给日志宏。

下面是一个示例代码:

代码语言:txt
复制
#[macro_use]
extern crate slog;
extern crate slog_term;

use slog::Drain;

fn main() {
    // 创建一个日志记录器
    let decorator = slog_term::TermDecorator::new().build();
    let drain = slog_term::FullFormat::new(decorator).build().fuse();
    let logger = slog::Logger::root(drain, o!());

    // 记录日志并打印调用位置
    info!(logger, "Hello, world!"; record_location!());
}

在上面的示例中,我们首先创建了一个日志记录器,使用slog_term库提供的终端装饰器和完整格式化器。然后,我们使用slog::Logger::root函数将装饰器和格式化器组合成一个日志记录器。

接下来,我们使用slog宏中的info!宏记录了一条日志,并通过record_location!宏获取了当前的源文件名和行号。这样,在日志中就会包含调用位置的信息。

需要注意的是,为了在Cargo.toml文件中使用slog库,你需要添加以下依赖项:

代码语言:txt
复制
[dependencies]
slog = "2.5"
slog-term = "2.6"

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云日志服务:腾讯云提供的日志服务,可以帮助您收集、存储、检索和分析大规模日志数据。
  • 腾讯云函数计算:腾讯云提供的无服务器计算服务,可以帮助您在云端运行代码,无需关心服务器的管理和维护。
  • 腾讯云容器服务:腾讯云提供的容器管理平台,可以帮助您快速部署、运行和管理容器化应用程序。

请注意,以上推荐的腾讯云产品仅供参考,您可以根据实际需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【Linux课程学习】:Linux的调试器-gdb的使用(常见指令,cgdb)

    ●list (文件名+:)(行号):查看行号位置的往上5行,往下5行,行号处于中间位置。 ●list (函数名):查看某个函数。 ●run:执行程序。...(F10) ●step(s):单条执行,进入函数调用。(F11) ●continue(c):从当前程序连续而非单步执行程序。 ●until 行号:跳至多少行。...●p 变量:打印变量的值,也可以是表达式。 ●set var 变量=:修改变量的值。 ●print(p):打印表达式的值。 安装cgdb: cgdb和gdb的指令相同,cgdb可以可视化源代码。...//进入 quit或者Ctrl+d //退出 2.查看源代码: list可以简写为:l list (文件名+:)(行号):查看行号位置的往上5行,往下5行,行号处于中间位置...(F10) step(s):单条执行,进入函数调用。(F11) continue(c):从当前程序连续而非单步执行程序。 until 行号:跳至多少行。

    19810

    【独家】Rust 1.70.0:详解新版本的亮点与变化

    允许宏展开的 format_args 调用使用捕获。 在 Rust 1.70.0 的更新中,允许宏展开的 format_args 调用使用捕获。这个更新主要是关于 Rust 的宏系统。...最终,这个 Pull Request 被合并到了 Rust 的主分支中。 对 let _ = expr 位置的表达式进行了 const 和 unsafe 检查。...这种形式的声明通常用于你不关心表达式的结果,但仍希望表达式被执行的情况,例如,当表达式有副作用(如打印输出或修改全局状态)时。 "const" 和 "unsafe" 是 Rust 的两个关键字。"...编译器更新: 扩展了 -Cdebuginfo 的新选项和命名别名,为只需要行号信息的情况提供了更小的 debuginfo(-Cdebuginfo=line-tables-only),这可能最终成为 -Cdebuginfo...生成最小量的调试信息,用于带有文件名/行号信息的回溯,但不包括其他任何信息,即没有变量或函数参数信息。 1 或 limited: 没有类型或变量级别信息的调试信息。

    64230

    Rust避坑Java空指针异常

    -2相应的没有行号的代码在github代码库中文件夹位置为book_LRBACP/ch02/null_pointer_fixer_java_optional_good_practices。...代码尝试通过给定的 id 获取一个名字,如果找到了就打印这个名字,如果没找到就打印一条未找到的消息。这使得代码更加简洁和富有表现力。这是 Java 8 及以后版本中函数式编程特性的一个很好的例子。...` (bin "null_pointer_fixer_rust_option_misuse") due to 1 previous error代码清单2-3相应的没有行号的代码在github代码库中文件夹位置为...第12行直接使用 get_name(id) 的结果进行打印,没有对 Option 进行匹配或处理。第15-18行是main 函数,分别调用 print_name 函数,传入参数 1 和 2。...=1` environment variable to display a backtrace代码清单2-4相应的没有行号的代码在github代码库中文件夹位置为book_LRBACP/ch02/null_pointer_fixer_rust_good_practices

    30161

    (转载)VC的内存泄漏检查

    发布版本使用普通的 malloc 和 free 函数。 _malloc_dbg接收文件名、行号参数。...,映射到带文件名和行号参数的operator new函数上,并最终调用到_heap_alloc_dbg_impl,并把分配内存的文件名、行号传递给_heap_alloc_dbg_impl。...默认不显示文件名和行号。我们最终的目的,是让对malloc等函数的调用,调用到_malloc_dbg等函数上(因为只有_malloc_dbg才接收带文件名和行号的参数)。...三、总结(这部分要全部看完再编写代码): 我们验证VC是否启动用了详细内存泄漏信息检测的方法,一个是运行一次程序,看报告是否包含文件名和行号;另一种方法是单步调试new或malloc调用,如果能进入带文件名和行号参数的函数...,就表示打印报告时,可以输出文件名和等号。

    1.4K20

    VC的内存泄漏检查

    发布版本使用普通的 malloc 和 free 函数。 _malloc_dbg接收文件名、行号参数。...,映射到带文件名和行号参数的operator new函数上,并最终调用到_heap_alloc_dbg_impl,并把分配内存的文件名、行号传递给_heap_alloc_dbg_impl。...默认不显示文件名和行号。我们最终的目的,是让对malloc等函数的调用,调用到_malloc_dbg等函数上(因为只有_malloc_dbg才接收带文件名和行号的参数)。...三、总结(这部分要全部看完再编写代码): 我们验证VC是否启动用了详细内存泄漏信息检测的方法,一个是运行一次程序,看报告是否包含文件名和行号;另一种方法是单步调试new或malloc调用,如果能进入带文件名和行号参数的函数...,就表示打印报告时,可以输出文件名和等号。

    1.8K40

    从内存布局上看,Rust的胖指针到底胖在栈上还是堆上?

    最近我在前辈巨师的带领下,也进入到学习Rust的大军中,与其它语言一样,Rust最初的爬坡难点也在于字符串方面的处理。...文件名.rs objdump -S 文件名 先来看以下代码 fn main() { let mut s1=String::from("hello"); let...接下来我又用gdb调用了一下上面这个程序,其中print s1的结果如下 (gdb) print s1 $2 = { vec = { buf = { ptr =...Gdb调试方法简要说明:用gdb调试rust程序也很简单,只需要在编译时加上-g参数,然后用gdb启动调试就可以了,具体的指令如下: rustc -g 文件名.rs gdb 文件名 进入到gdb模式后...,如 b 3 使用r命令运行程序 r 设置print的pretty参数为on set print pretty on 查看栈寄存器信息 info reg rsp 打印变量信息 print s1 查看内存信息

    1.1K20

    【Rust学习】20_错误处理_panic!

    默认情况下,这些异常会打印一条失败消息,展开、清理堆栈并退出。通过设置环境变量,你还可以让Rust在发生异常时显示调用栈,以便更容易追踪异常的来源。...第一行显示了我们的异常消息和源代码中发生异常的位置:src/main.rs:2:5 表示它是 src/main.rs 文件的第二行,第五个字符。...宏调用。在其他情况下,panic!调用可能在我们的代码调用的代码中,错误消息报告的文件名和行号将是其他人代码中调用 panic!宏的地方,而不是最终导致 panic!调用的代码行。...为了保护你的程序免受这种漏洞的影响,如果你试图读取一个不存在的索引位置的元素,Rust将会停止执行并拒绝继续。...Rust 中的回溯和其他语言一样工作:读取回溯的关键是从顶部开始阅读,直到看到你写的文件。这就是问题的根源。该点上方的行是您的代码调用的代码;下方的行是调用您的代码的代码。

    7500

    Linux之基础开发工具

    1.行号 set nu/nonu 列出行号/取消行号 2.分屏 vs copy.c 同时打开多个文件(代码中的copy.c是文件名),但是只有一个光标。光标的意义在于选中的行或屏幕。...gcc test.o -o test 链接的过程形成了可执行程序(test是我们自定义的可执行程序文件名,可以进行修改) 可以看到整个过程形成的所有的文件: 3.函数库 1.库函数 我们自己写的代码和库是两码事...list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某个函数的源代码。 r或run:运行程序。 n 或 next:单条执行。...s或step:进入函数调用 break(b) 行号:在某一行设置断点 break 函数名:在某个函数开头设置断点 info break :查看断点信息。...finish:执行到当前函数返回,然后挺下来等待命令 print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数 p 变量:打印变量值。

    29720

    听GPT 讲Rust源代码--librarycoresrc(6)

    这个宏通过调用类型的index()方法来实现索引操作。 println!()和print!():它们是用于在控制台打印输出的宏,用法与相应的标准库函数类似。这些宏允许程序员在运行时向终端输出文本。...首先,Location这个结构体表示panic发生的位置。它包含了四个字段: file: 一个&'a str类型的字段,表示文件名。 line: 一个u32类型的字段,表示行号。...(...)宏在出现panic时输出更加详细的错误信息,包括panic的文件名、行号、列号和函数名等等。...此外,Location结构体还定义了一些辅助方法来获取和打印位置信息,包括: fn file(&self) -> &'a str: 返回panic发生的文件名。...location 字段保存了 panic 发生的位置信息,它是一个 'static 生命周期的引用,包含文件名、行号等信息。

    22920

    听GPT 讲Rust源代码--srctools(38)

    这个函数处理从命令行传入的参数和选项,并根据需要调用其他模块来执行相应的操作。...实现具体的代码分析和检查逻辑:lib.rs文件通过调用lint模块中的具体检查函数,对传入的Rust源代码进行静态分析和检查。...它包含了一些字段和方法,用于解析命令行参数、执行Clippy的静态代码分析和打印结果。...总的来说,ModifiedLinesEmitter结构体和ModifiedLines结构体是用于追踪和记录Rust代码格式化过程中被修改的行号的重要组件。...它提供了一些方法来设置格式报告的选项,例如报告的文件名、格式化结果等。构建器使用new方法创建一个新的构建器实例,并通过链式调用其他方法来设置选项。

    15210

    Linux之ack命令

    yum install -y ack 命令特点 默认搜索当前工作目录 默认递归搜索子目录 忽略元数据目录,比如.svn,.git,CSV等目录 忽略二进制文件(比如pdf,image,coredumps)和备份文件...(比如foo~,*.swp) 在搜索结果中打印行号,有助于找到目标代码 能搜索特定文件类型(比如Perl,C++,Makefile),该文件类型可以有多种文件后缀 高亮搜索结果 支持Perl的高级正则表达式...命令参数 -n, 显示行号 -l/L, 显示匹配/不匹配的文件名 -c, 统计次数 -v, invert match -w, 词匹配 -i, 忽略大小写 -f, 只显示文件名,不进行搜索..../etc 除了temp目录,在所有目录搜索use单词 > ack use --ignore-dir=temp 只搜索包含'main'单词的Python文件,然后通过文件名把搜索结果整合在一起,打印每个文件对应的搜索结果...*\bruby/ --[no]rust .rs --[no]sass .sass .scss --[no]scala .scala

    1.8K00

    Linux之ack命令

    install -y ack 命令特点 默认搜索当前工作目录 默认递归搜索子目录 忽略元数据目录,比如.svn,.git,CSV等目录 忽略二进制文件(比如pdf,image,coredumps)和备份文件...(比如foo~,*.swp) 在搜索结果中打印行号,有助于找到目标代码 能搜索特定文件类型(比如Perl,C++,Makefile),该文件类型可以有多种文件后缀 高亮搜索结果 支持Perl的高级正则表达式...命令参数 -n, 显示行号 -l/L, 显示匹配/不匹配的文件名 -c, 统计次数 -v, invert match -w, 词匹配 -i, 忽略大小写 -f, 只显示文件名,不进行搜索..../etc 除了temp目录,在所有目录搜索use单词 > ack use --ignore-dir=temp 只搜索包含'main'单词的Python文件,然后通过文件名把搜索结果整合在一起,打印每个文件对应的搜索结果...*\bruby/ --[no]rust .rs --[no]sass .sass .scss --[no]scala .scala

    1.2K20

    Linux之ack命令

    yum install -y ack 命令特点 默认搜索当前工作目录 默认递归搜索子目录 忽略元数据目录,比如.svn,.git,CSV等目录 忽略二进制文件(比如pdf,image,coredumps)和备份文件...(比如foo~,*.swp) 在搜索结果中打印行号,有助于找到目标代码 能搜索特定文件类型(比如Perl,C++,Makefile),该文件类型可以有多种文件后缀 高亮搜索结果 支持Perl的高级正则表达式...命令参数 -n, 显示行号 -l/L, 显示匹配/不匹配的文件名 -c, 统计次数 -v, invert match -w, 词匹配 -i, 忽略大小写 -f, 只显示文件名,不进行搜索..../etc 除了temp目录,在所有目录搜索use单词 > ack use --ignore-dir=temp 只搜索包含'main'单词的Python文件,然后通过文件名把搜索结果整合在一起,打印每个文件对应的搜索结果...*\bruby/ --[no]rust .rs --[no]sass .sass .scss --[no]scala .scala

    1.2K00

    求求你,别用 print 来 debug 了

    打印变量时 ic 的用法和 print 的用法基本一样,但比 print 更好用: ic 可以自动打印变量或表达式的名称。 ic 打印的结果更漂亮的,包含语法高亮。...ic 可以输出程序的上下文:文件名,行号,父函数名等信息。 ic 可以一次导入处处使用。 ic 可以配置前缀。 重要的是,它让你编写 print 语句的时间减少了 40%。...icecream 检查执行位置 不带任何参数也是可以的: from icecream import ic expression = False def foo(): ic() #first...in foo() at 02:49:29.467 ic| demo.py:13 in foo() at 02:49:29.469 可以看出,ic() 还自动输出了时间戳,因此看程序执行到哪里,直接调用...最后的话 请注意 icecream 是个通用的工具,不只是 Python 能用,以下编程语言也可以用: Dart: icecream[1] Rust: icecream-rs[2] Node.js: node-icecream

    57910

    Python - 警告模块 warnings

    警告的处理方式可以依据警告类型 、警告信息的文本和发出警告的源位置而进行变化。同一源位置重复出现的警告通常会被抑制。...警告信息的打印输出是通过调用 showwarning() 完成的,该函数可被重写;默认的实现代码是调用 formatwarning()进行格式化,自己编写的代码也可以调用此格式化函数。...(模块+行号)打印第一个匹配警告 "error" 将匹配警告转换为异常 "ignore" 从不打印匹配的警告 "always" 总是打印匹配的警告 "module" 为发出警告的每个模块打印第一次匹配警告...(无论行号如何) "once" 无论位置如何,仅打印第一次出现的匹配警告 message 是一个包含警告消息的开头需要匹配的正则表达式的字符串,对大小写不敏感。...lineno, module=None, registry=None, module_globals=None, source=None) 这是 warn() 函数的底层接口,显式传入消息、类别、文件名和行号

    1.6K30
    领券