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

Elixir - Logger输出在从命令行运行时是多彩的,而从iex运行时则不是这样

Elixir是一种基于Erlang虚拟机的函数式编程语言,它具有高可伸缩性、并发性和容错性。Elixir的Logger模块是用于记录日志的工具,可以在命令行或iex(Elixir的交互式环境)中使用。

在从命令行运行时,Logger输出是多彩的,这意味着日志消息可以以不同的颜色显示,以提高可读性和可视化效果。这对于在终端中查看日志非常有用。

然而,在从iex运行时,Logger输出不是多彩的,这是因为iex环境不支持终端颜色控制。在iex中,Logger输出将以普通的黑白文本形式显示。

尽管Logger输出在iex中不是多彩的,但它仍然可以正常工作并记录日志消息。可以使用Logger模块的各种功能,如设置日志级别、选择输出位置、格式化日志消息等。

对于Elixir开发者来说,可以根据实际需求在命令行或iex中选择使用Logger模块来记录日志。如果需要更好的可视化效果和可读性,可以在命令行中运行程序;如果只是简单地查看日志消息,iex也是一个方便的选择。

腾讯云提供了一系列与云计算相关的产品和服务,但在此不提及具体品牌商。如果您对腾讯云的相关产品感兴趣,可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多信息。

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

相关·内容

(译) Understanding Elixir Macros, Part 3 - Getting into the AST

由于我们不分析或解析输入的 AST, 这可能是最干净(或最不 hackiest)的宏编写风格, 这样的宏相当简单且容易理解. 然而, 有时候我们需要解析输入的 AST 片段以获取某些特殊信息....从好的方面来看, 宏在删除样板代码时非常有用(正如 ExActor 示例所展示的那样), 并且具有访问运行时不可用的信息的能力(正如您应该从 assert 示例中看到的那样)....通常你不会对上下文数据感兴趣;第三个元素通常代表 quoted 发生的模块, 同时也用于确保 quoted 变量的 hygienic. 如果该元素为 nil, 则该标识符是不 hygienic 的....我不会在这里写出所有 AST 的形状, 但会在 iex 中尝试你感兴趣的简单的结构来探索 AST. 这是一个逆向工程, 但不是火箭科学....我还引入(实际上, 是从 Elixir 源代码中复制粘贴了)guard 语句指定了宏能处理的运算符集(第 3 行). 这个检查有一个特殊原因.

15550

(译) Understanding Elixir Macros, Part 1 Basics

虽然我确信编写宏不是很难, 但与普通的 Elixir 代码相比, 它确实需要更高视角的关注. 因此, 我认为这了解 Elixir 编译器的一些内部细节是非常有帮助的....如果你刚开始接触 Elixir 和 Erlang, 那么最好从其它地方开始. 比如 Getting started guide, 或者一些可靠的书....调用 Plug 的 get 和 match 会创建一个函数, 而 ExActor 的 defcall 会生成两个函数和将参数正确从客户端进程传播给服务端进程的代码....进入运行时 (run-time) 后, 代码就已经定型了, 代码中不会有元编程结构在运行. 创建 AST 片段 什么是 Elixir AST?...例如, 这样是不能达到效果的: iex(8)> quote do ...(8)> bind_expr ...(8)> sum_expr ...(8)> end {:__block__, [],

19030
  • (译) Understanding Elixir Macros, Part 6 - In-place Code Generation

    仅仅调用 def action 是不够的, 因为 def 宏接收到的是对 action 的 unquoted, 而不是变量 action 中的值....否则, 如果从函数定义内部调用宏, 并且将代码生成操作移动到调用者的上下文中, 那么实际上将代码执行从编译时(compile-time)移动到了运行时(run-time), 这会影响到性能....如在注释中提到的, 重要的是要理解unquote(head) 在这里引用的是存在于调用者上下文中的 head 变量. 我们不是从宏上下文注入一个变量, 而是一个存在于调用者上下文中的变量....bar # 而可访问 end 代码注入 vs 数据传输 我们要面临的另一个问题是: 从宏传递到调用者上下文的内容在默认情况下是注入的, 而不是传输的....试着确保你不是盲目地做 escapes(和/或 unquote: true), 而不理解这是你真正想要的. 毕竟, 这不是默认的行为是有原因的.

    18240

    Elixir 连续运行时代码覆盖率采集方案

    本文将会基于 Erlang 的 cover 模块, 给出一个 Elixir 运行时系统的解决方案....在开始之前, 让我们先看下开源社区进行运行时系统代码覆盖率采集的两种主流方式(这里我们看下语言社区生态庞大的 Java 的字节码插桩方式): 接下来让我们关注一下本文的 Elixir 运行时覆盖率收集的核心...从官方文档的介绍来看, cover 可以用于运行时系统的代码覆盖率收集, cover 进行代码插桩时, 并不会对任何模块的代码源文件或编译后生成的 beam 文件进行修改(即业界所说的 On-The-Fly...Elixir 源码的编译为 BEAM 文件的过程可能和你想象的不太一样, 不直接从 Elixir 的 AST, 经过编译器后端的处理后成为可执行的 BEAM Code, 中间还有一个过程, 如下图所示:...我们还可以使用如下方式查看更为详尽的代码覆盖情况, 比如查看 lib/explore_ast_app/router.ex 的代码覆盖情况(nil 表示该行不是 executable line): iex

    37050

    (译) Understanding Elixir Macros, Part 4 - Diving Deeper

    这样做的目的是为了表明深入研究 AST 并不是很难的, 尽管最终的结果代码很容易变得相当复杂, 而且有点黑科技(hacky)....在开始之前, 我要再提一次, 你应该仔细考虑你是否真的需要这样的结构. 例如 deftraceable 这样的宏引入了一个每个代码维护者都需要了解的东西. 看着代码, 它背后发生的事不是显而易见的....如果每个人都设计这样的结构, 每个 Elixir 项目都会很快地变成自定义语言的大锅汤....宏结束处的 nil 确保我们不生成任何东西(我们生成的 nil 通常与调用者代码无关). 这允许我进一步构建片段而不注入代码....) Test.my_fun(10,5) = 2.0 这个练习的主要目的是说明可以从输入 AST 中推断出一些东西.

    10530

    (译) Understanding Elixir Macros, Part 2 - Micro Theory

    当我们 require 了一个模块, 我们会让 Elixir 暂停当前模块的编译, 直到我们 require 的模块编译好并载入到了编译器的运行时(编译器所在的 Erlang VM 实例)....由于宏也是函数, 而 Elixir 在调用函数时可以省略括号, 所以我们可以这样写: Tracer.trace 1+2 这很可能是 Elixir 之所以不在函数调用时要求括号的最主要原因....因为在宏代码中, 您可以很容易地从关键字列表中获取所需要的选项, 而不需要分析一些令人费解的AST....理想情况下, 当我们这样做时, 我们不需要关心输入 AST 的内容, 在我们的例子中, 我们只需要在生成的函数中注入函数体, 而不需要关心函数体中实际有什么. 测试这个宏很简单....特别注意我们是如何从 __using__ 宏里使用 import Plug.Router 的, 这不是必要的. 但这让你可以使用 get 替代使用 Plug.Router.get.

    14440

    如何使用一门新的语言

    虽然本文以 elixir 为例,但很多实践都是通用的,和语言无关。 目标 在一个已有的系统里使用新的语言并不是一件轻而易举地事情,挑战会比你预想得多。...对于 elixir 项目,这个选择很简单 —— elixir 是一门编译型的语言,所以没有真正意义上的 lint,更多的是 static analysis,所以我选用 credo,而 elixir 自带一个很棒的...一般而言,你的项目功能完成后,把基本功能包装成 rest API,供其他项目调用。 因为 rest API 是浅浅的一层,所以我使用了 plug,而没有用大而全的 phoenix。...之所以直接在 target host 上直接编译,而不是用 CI 工具生成的 artifacts,是因为由于项目的特殊性,在编译期我需要访问 production db,而把 production db...在这样的方案下,新的项目和现有的日志系统集成并不太困难,只要为 Logger 选择一个合适的 file backend 即可。

    96860

    Phoenix 1.3,迈向正确的道路

    几天前,1.3 RC.0 悄然发布,我们终于可以一睹她的芳容。 引子 因为程序人生的读者大多不是 elixir / phoenix 的用户,所以在这里小小普及一下。...而 phoenix,是 elixir 语言下的一个脱胎于 rails 的框架,可以帮助我们快速打造 webapp。...在这样的代码里,我们看不清系统各部分的边界在哪里。新的代码的插入是那样的顺理成章,以至于一切良好的设计都随着边界的模糊而变得混乱不堪。理想的状态是这样: ?...而 elixir / erlang 中,logger 是一个 app,db connector 是一个 app,当你要记录日志时,实际上是发一个 message 给 logger app,请它来处理 log...而 从结构上给出正确的方向,往往是 framework 的最大贡献。很欣喜,phoenix 1.3 终于迈出了这一步。 当然,这样的步子迈起来很痛,容易扯着蛋。

    1.6K150

    ​在群晖docker上装elmlang可视调试编码器ellie

    atom,vscode这样的东西,在业界是推崇用vim的,他命令区和编辑区合一的ui方案使之成为通用ide,那么在远程呢,越来越流行的还有很多web IDE,elmlang for webapp的特性使得其天然就与...web ide相生相融,与我的想法颇为迎合的是,elmlang的官方发布了一个ellie:el-li-e,elmlang live editor的意思,它模拟了atom这样的本地编辑器方案,该项目托管在...elixir又作为erlang的一个库与可执行服务正如elmlang是nodejs的一个库与可执行服务一样,erlang也是源码形式发布的,所以erlang->elixir是语言源码套源码形式发布的。...代码的执行结果反馈(webpack框架),而elixir负责的是前端(phoenix框架),负责你打开ellie时的那个界面,总之很绕。。。...,比如我部署运行时的IP是52.81.25.39。

    1.2K60

    我终于逃离了 Node

    当时业界的潮流是反对过去的大一统理念的,像 Ruby on Rails 和 ASP.NET 这样的单体框架逐渐失宠。...从那时起,每次我被其他程序员的代码打动的时候,都不是因为代码用了聪明的技巧或者算法,而是因为我从代码中能看出程序员对程序数据应有结构的独到眼光。 这一原则将数据结构视为大厦的基础。...我得到了一个 promise,而不是一个结果,所以我需要添加其他逻辑来处理这个 promise 并获得结果。...,我永远不会忘记当我第一次在 Elixir 的 REPL,iex 中做一个 SQL 查询的那一刻。...像这样的 I/O 操作不就是你用到 async 的地方吗?我是否以某种方式在 REPL 中关闭了异步?难道 Elixir 不是异步的吗?

    51330

    如何在Ubuntu 16.04上使用Distillery和edeliver自动化Elixir-Phoenix部署

    介绍 Elixir构建于Erlang编程语言之上,是一种功能性编程语言,因其专注于开发人员的工作效率以及因为编写高度并发和可伸缩的应用程序而易于使用而闻名。...Phoenix是一个基于Elixir构建的Web框架,允许创建高性能的Web应用程序。...cd ~/myproject mix edeliver build release 输出实时更新构建过程的每个步骤,如果一切按预期工作,则告诉您构建成功。...mix edeliver deploy release to production 输出再次实时更新了流程的每个步骤,如果一切正常,则告诉您构建已发布到生产中。...mix edeliver upgrade production 再一次,输出实时地引导我们完成整个过程的每一步,如果成功,则结束于,UPGRADE DONE!。

    4.3K00

    我是怎样学习新编程语言的

    借我司的一位牛人的原话:看一个人会不会测试驱动开发,不是看他的测试写得好不好,而是要看他是不是始终从测试出发去解决问题。脑子里条件反射的就是测试该怎么测?这种才是测试驱动开发的实质。...Elixir中有iex命令作为repl,而且这门语言深受Clojure的影响,尤其是文档和例子方面很充足,对于初学者再友好不过。...Clojure中有keyword,如{:name "clojure"},而Python中并没有这样的数据类型,我只好使用{'name': "python"},那么Elixir呢?...这些都比较好理解,不过这里其实出现了两个新的玩意(当然也不是一蹴而就的,认识之后才重构成这样)。一个是\\ ".",还有一个是|>。...重构 这里重构的目的是让程序更加贴近Elixir的表达习惯,那么哪里不是很符合Elixir风格呢?我注意到了if...else,可以考虑模式匹配实现多态。

    93830

    构建下一代 HTTP API - 架构

    quenya_builder 提供一个命令行工具可以随时将 OpenAPI v3 spec 编译成 elixir 代码。未来也许通过代码模板支持 rust 的服务端代码生成(基于 tide)。...注意,虽然 Quenya 是用 Elixir 撰写的,Quenya 所生成的服务器端代码也是 Elixir 代码,但整个架构和语言关系不大,我也尽量会让文章不涉及太多语言细节导致影响大家的阅读。...在这里我所阐述的是我个人对这样一个问题的解决思路,尤其是我如何得到这样一个思路的思考过程。 Quenya 的架构(上) 有了这样一个结构上的大方向,Quenya 的架构并不困难。...这个结构从架构的角度看没有问题,事实上几乎所有的极简主义 web 框架( minimalist web framework,比如 nodejs 的 express,python 的 flask,Elixir...虽然在这两者间划一条清晰的界限是很难的,但我们的目标是:让开发者尽可能少些代码,并且, 尽可能只写组件(building blocks),而粘合组件的工作,应该由框架来辅助。

    83020

    各个语言运行100万个并发任务需要多少内存?

    不幸的是,这些程序相当复杂,功能也不尽相同,因此很难直接进行比较并得出有意义的结论,因为这不是一个典型的苹果到苹果的比较。这促使我想出了创建一个综合性基准测试的想法。...任务的数量由命令行参数控制。 在ChatGPT的小小帮助下,我可以在几分钟内用各种编程语言编写出这样的程序,甚至包括那些我不是每天都在用的编程语言。...但是从Rust中使用的原生Linux线程似乎足够轻量级,在10000个线程时,内存消耗仍然低于许多其他运行时的空闲内存消耗。...它还输给了Java 2倍以上,这与人们普遍认为JVM是内存大户,而Go轻量的观念相矛盾。 Rust的tokio依然无可匹敌。在看过它在100k任务下的表现后,这并不令人惊讶。...相反,其他一些具有高初始开销的运行时可以毫不费力地应对高负载。值得注意的是,并非所有运行时都能在默认设置下处理大量的并发任务。 这个比较仅关注内存消耗,而任务启动时间和通信速度等其他因素同样重要。

    37720

    Elixir: 编程语言的未来

    依赖和库管理系统 这点 Node.js npm 是最好的依赖管理系统了,这样导致了 Node.js 社群库数量的爆发。因为创建和发布一个库实在是太容易了,找到需要的库也非常简单。...这可能不能算一个编程语言的特性了,要看这个语言是不是有很好的日志类库。 Java 的 SLF 就是一个比较好的日志系统类库。 工具链 项目构建、编译、测试工具比较完善。...Erlang 项目可以用 rebar ,但是 Elixir 的 mix 友好的很多倍。 另外一个好的 REPL 命令行工具非常重要,因为这可以方便的侵入应用进行调试,或者测试一条代码片段。...比如 PHP 的 php -a, sbt, Clojure 的 lein, Erlang 的 erl, Elixir 的 iex 等等。 脚本执行 这是脚本语言的一大优势。...小任务可以立刻创建一个脚本执行,而不需要修改、编译部署现有运行的应用。 这点对于小任务非常重要。Erlang 和 Elixir 都支持这样运行,escript 或者 Elixir 脚本。

    2.9K40

    为什么日志要private static final

    对象传递给getLog()方法,而不是字符串。...嗯,它不是静态的。另一方面,它使用getClass()来获取日志。起初,这似乎很有效,因为现在所有子类都自动继承了正确运行时类型的现成的日志。这里出了什么问题?...以这种方式声明的日志记录器的最大问题是,您现在从超类中获得的所有日志记录与子类的日志记录混合在一起,并且在日志输出中,除非您查看源代码,否则无法识别哪些消息来自哪个类。...在这种情况下,如果试图从超类中筛选出日志记录,则不能,因为实际的运行时类用于获取日志记录器。 最后,拥有一个受保护的记录器似乎违反了基本的面向对象原则。...为什么子类应该从横切关注点的超类了解内部实现细节?无论如何,虽然这是一个愚蠢的小咆哮,但是当您扩展一个声明像这样的受保护日志记录器的超类时,它确实很烦人。

    2.2K20

    一种 Powershell 的混淆方式绕过 AMSI 检测

    在这里,iex 在数据变量中执行代码,将其转换为字符串,而错误则重定向到空值,然后将其存储在 $sendback 变量中。...现在,这里的诀窍是将上述每个命令分别混淆,而不是将它们全部编码在一起。...所以简单来说,我们的任务是以下步骤: 打破有效载荷 混淆每条命令行 缝合有效载荷 对有效载荷进行编码 我们已经分解了上面的有效载荷。现在是时候混淆每个命令了。...因此,我们将确保有效负载中不存在任何字符串或任何编码版本的 IEX,但我们仍将使用此命令。记住,IEX 本身不是恶意的。它和任何其他微软 API 一样好。...原因是当你剥离整个代码并在 PowerShell 中逐一执行它们时,您将意识到 IEX 是由 AMSI 标记的部分,而不是任何其他部分。但请随意混淆有效载荷的其余部分。

    4.5K40

    当我做 hackathon 时我在做什么 (1)

    之所以觉得这个方向不是特别有意义,是因为 Python 在 data science 上有非常完整的生态系统,其它通用语言(不是 Julia 或者 R 这样的专业语言)在这里争一席之地代价太大,而 Python...是,也不是。 在 elixir 和 rust 间传递的数据结构就需要一番考量。...而 dataframe 是可以修改的数据结构(如果调用时传入 inplace=True),这就意味着 Elixir 到 Rust 侧的传递需要 RwLock + Arc,而为了在 Elixir 侧能够很好地...::acquire_gil 到 PyModule::import 都给你安排好了,就问你服不服);而 rust 和 elixir 间的互操作,是单向的,elixir 可以调 rust 的代码,但无法扔一个函数给...因为#[rustler::nif] 需要把输入输出类型和 elixir 的类型进行互换,所以这里需要确定的类型,而无法使用模板。

    1.1K20
    领券