我们做为程序员,日志打印是日常必备工具,见下面几种语言的打印日志
//c
printf("Hello World!\n");
//OC
NSLog(@"Hello, World!");
//Dart
print("Hello, World!");
官方对日志系统的介绍
所以在HarmonyOS 开发中也是要熟悉打印日志的,官方文档对日志系统的介绍https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide-debug-hilog-0000001172459337
官方日志示例如下
package com.example.myapplication.slice; // 请开发者根据实际包名进行填写
import com.example.myapplication.ResourceTable; // 请开发者根据实际包名进行填写
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.DirectionalLayout;
import ohos.agp.components.element.ShapeElement;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
public class MainAbilitySlice extends AbilitySlice {
// 定义日志标签
private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
@Override
public void onStart(Intent intent) {
super.onStart(intent);
//添加一个按钮
DirectionalLayout directionalLayout = new DirectionalLayout(getContext());
Button button = new Button(getContext());
button.setText("Click!");
button.setTextSize(200);
// 设置按钮的间距和背景等样式
button.setMarginTop(100);
button.setMarginLeft(200);
button.setPadding(120,60,120,60);
ShapeElement backgroundElement = new ShapeElement(this,ResourceTable.Graphic_background_element);button.setBackground(backgroundElement);
if (button != null) {
// 为按钮设置点击回调
button.setClickedListener(component -> {
// 打印一条日志
HiLog.info(LABEL, "Hey! You have successfully printed a log.");
});
}
directionalLayout.addComponent(button);
super.setUIContent(directionalLayout);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
其中打印语句如下,
// 打印一条日志
HiLog.info(LABEL, "Hey! You have successfully printed a log.");
细心的你,你肯定发现了,有一个参数LABEL
,这个参数是在最前面定义的,如下
// 定义日志标签
private static final HiLogLabel LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
其中第一个参数基本是固定的HiLog.LOG_APP
,第二个,第三个参数,我们可以自定义的, 后面会使用它们作为过滤来筛选日志
我们对日志进行封装
在我们开发中,到处都需要使用到打印,如果像官方示例一样,在每一个需要使用的地方,都先定义一个LEBAL,然后再去调用,这样就不太方便了, 也就是说我们有100个不界面,每个界面都需要先定义一下LEBAL,然后再去使用,这样就比较麻烦了, 因此我们需要对HiLog进行封装,封装成一个工具类,方便整个项目后面的使用
package com.example.myapplication0920;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
public class HiLogUtils {
public static final String TAG = "HM_TAG";
private static final HiLogLabel LABEL = new HiLogLabel(ohos.hiviewdfx.HiLog.LOG_APP, 0x10000, TAG);
public static boolean flag = false;
public static void d(String msg){
if(!flag){
HiLog.debug(LABEL, msg);
}
}
public static void e(String msg){
if(!flag){
HiLog.error(LABEL, msg);
}
}
public static void w(String msg){
if(!flag){
HiLog.warn(LABEL, msg);
}
}
public static void i (String msg){
if(!flag){
HiLog.info(LABEL, msg);
}
}
public static void f(String msg){
if(!flag){
HiLog.fatal(LABEL, msg);
}
}
}
现在我们来解释一下
image.png
上图中的LABEL,我们在上前面已经讲过了,这里不在赘述了.我们看一下flag
,这个参数用来标记,如果是开发阶段,就置为fasle,让其能正常输出日志, 如果是生产阶段(产品上线),就置为true,让其不能输出日志
外面使用简单,到处都可以使用
HiLogUtils.d("onStart");
image.png
效果如下:
image.png
结尾
看到这里的小伙们,或者觉得文章对你有点帮助的话,请点赞加关注喽,您的反馈就是我们前进的动力。后续会分享更多关于鸿蒙开发(HarmonyOS)的干货。谢谢~~
网友评论