如何使用 Unified Logging, Swift版

如何使用 Unified Logging, Swift版

作者 Jared Sinclair 翻译者 Guanglei Liu

原文出处: https://www.bignerdranch.com/blog/migrating-to-unified-logging-swift-edition/

你是否正在考虑把所有的iOS 或者 macOS app 里面的 NSLog 或者 print 用最新的 Unified Logging system 替换掉呢?那么请你继续读下去,本文会给你一些相关的建议。

如果你还不太确定是否应该使用Unified Logging, 那么以下列出了一些使用他的优点。

1. 它是最新的规格。 Unified Logging system 是苹果平台最近几年最大的改善。它奠定了未来苹果平台使用 Logging 的具体方向。

2. 在没有牺牲任何功能的情况下提高了app的性能。最新的 Logging system 是一个全新设计的系统,用来减少传统的 Logging 系统所产生的 observer effect 影响。它在保持了原有的功能的基础提高了系统的性能。

3. .能够让你的Debugging流程更加方便。 使用最新的API,可以通过Console.app自定义subsystem并且分类, 利用 search filters 来显示或者隐藏 信息。 针对于 debug 很多个model 或者 process 的程序会带来很大的方便。

Unified Logging system 跟传统的 Logging 相比之下的四大优点

以下并没有全部列出每一个Unified Logging的改善,但是通过几个具体的例子来体现它跟之前的系统有什么本质上的不同。

1. OSLog不是function, 而是一个 data type

如果你把OSLog当成是一个function那你就错了。正如NSLog一样, 类似os_log 这样的function都是在<os/log.h>里面定义的。多数的function都是把 os_log_t ( 在 swift 里面就是 OSLog ) 作为一个argument. 在Console 软件里面,OSLog 和其他一些相关的信息结合在一起使用,来实现在搜索跟过滤的功能。

2. 必须使用Console 软件

当使用Unified Logging的时候输出结果并不是可读的,他们都是以不可读的格式写在硬盘里面的,只能通过以log archive的形式 在Console 软件里面打开(后文会介绍如何生成一个log archive)。 Console可以把log archive转化成一种方便搜索跟过滤的形式。 数据格式的不透明性可能是跟以往的Logging system 最大区别。苹果公司花了很大的心思去优化之前传统Logging system对系统的性能跟内存空间所造成的影响。

3. 把 StaticString 当成 log message

以下的Swift代码是无法编译的

let
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Unified Expression Language(JUEL)是一个基于 Java 的表达式语言,它提供了一组语法规则和函数库,可以用于在 Java 应用程序中动态地计算、处理和生成字符串、数字、布尔值和对象等数据类型。以下是一些 JUEL 的使用案例: 1. 在 JSP 页面中使用 JUEL 表达式生成动态 HTML 内容: ``` <ul> <c:forEach var="item" items="${items}"> <li>${item.name} - ${item.price}</li> </c:forEach> </ul> ``` 在这个例子中,`${item.name}`和`${item.price}`是 JUEL 表达式,它们会动态地计算出每个商品的名称和价格,并将它们插入到 HTML 中。 2. 在 JSF 应用程序中使用 JUEL 表达式进行表单验证: ``` <h:inputText id="email" value="#{user.email}" required="true" validator="#{emailValidator.validate}"> <f:ajax event="blur" render="emailMessage" /> </h:inputText> <h:message id="emailMessage" for="email" /> ``` 在这个例子中,`#{user.email}`是一个 JUEL 表达式,它会动态地计算出当前用户输入的电子邮件地址,并将它存储在一个名为`email`的属性中。在这个表单中,`email`属性是一个必填字段,所以我们使用了`required="true"`属性来指定它是必填的。同时,我们还使用了一个名为`emailValidator`的验证器来检查用户输入的电子邮件地址是否合法。`emailValidator`是一个包含了验证逻辑的 Java 类,它会在用户提交表单时被调用。 3. 在 Java 应用程序中使用 JUEL 表达式进行动态计算: ``` ExpressionFactory factory = new ExpressionFactoryImpl(); SimpleContext context = new SimpleContext(); context.setVariable("x", factory.createValueExpression(2, int.class)); context.setVariable("y", factory.createValueExpression(3, int.class)); ValueExpression expression = factory.createValueExpression(context, "#{x + y}", int.class); int result = (int) expression.getValue(context); System.out.println(result); // 输出 5 ``` 在这个例子中,我们使用了 JUEL 的 API 来创建了一个包含了表达式`${x + y}`的 JUEL 表达式。然后,我们将变量`x`和`y`绑定到了上下文中,并通过表达式的`getValue()`方法动态地计算表达式的值。最后,我们将计算出的结果输出到了控制台上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值