导航:首页 > 源码编译 > 日志带源码

日志带源码

发布时间:2024-11-15 07:16:22

❶ logback之Appender源码解读

在logback日志框架中,每一个Logger都会去关联一个Appender,Appender是真正把日志内容输出到控制台,文件等,可以说在日常应用中非常重要和拓展的一个组件。

其中最重要的就是 doAppend() 方法,每一个日志事件输出,都会调用到这个接口。

其中,有我们熟悉的 ConsoleAppender 和 FileAppender ,还有 RollingFileAppender 。另外,有一个很重要的 AsyncAppender 接口,异步输出,这也是logback日志受欢迎的一个非常重要的特性。他们都继承与抽象类 UnsynchronizedAppenderBase 类。

在 UnsynchronizedAppenderBase 中,我们看一下其中实现了最重要的一个方法 doAppend()

其实这个方法没有东西也没有做,只是使用模版方法,让具体的子类交给子类的 append() 方法实现具体的逻辑。

在 OutputStreamAppender 类中,有几个比较重要的成员变量。

其中 encoder 最主要的作用就是把日志事件要输出的内容变成字节数组,然后把字节数组写入到 outputStream 。

其中 outputStream 可以是控制台或者文件等。

接着看 append() 方法

这个方法也是没有做什么,接着具体看 subAppend() 方法。

在这个方法中,可以看到 encoder 的作用,同时还有一个重要的方法 writeBytes()

这个方法就是把字节数组写入到outputStream中。

总结一下:一个日志事件记录的流程就是,要需要输出的内容通过encoder变成字节数组,然后写入到具体的输出流中。

ConsoleAppender 继承了 OutputStreamAppender ,唯一不一样的就是输出的位置, ConsoleAppender 是输出到控制台,outputStream输出流也应该是控制台。

其中, start() 方法会在初始化logback.xml配置的时候去调用,在 start() 方法中就设置了outputStream输出流——控制台。

FileAppender ,如果一个日志事件需要输出到文件中,那么它就需要一个文件输出流FileOutStream。

需要设置一个文件名。在看看 start() 方法对 FileAppender 进行初始化工作。

主要看 openFile() 方法

在这个方法中,通过文件名去 new File() 文件,然后封装到 ResilientFileOutputStream 中,然后设置 setOutputStream() ,这样子就可以把日志输出到文件中了。

异步输出,也就意味着会把日志事件先放入到一个队列中,然后由专门的线程去队列中拿日志事件消费。

看类 AsyncAppenderBase 中几个重要的成员变量

AppenderAttachableImpl 里面包含一个Appender列表,列表是具体的Appender,如上面讲到的ConsoleAppender和FileAppender。

BlockingQueue是一个队列,Worker是一个消费线程。

例如,在配置文件中定义一个异步的Appender

接下来看看具体是如何实现异步输出的。

start() 方法初始化中,定义了一个 ArrayBlockingQueue 队列,以及启动了一个worker线程。

接着看 append() 方法

在 append() 方法中,并没有马上处理日志事件,而是调用 put() 方法

接着把日志事件放进去消息队列中。然后由 Worker 线程去处理

Worker 线程从队列中take()取出事件,然后由具体的Appender去处理

看到调用 doAppend() ,已经和之前的Appender是一样的啦。
本文是笔者个人的理解,若有不正确指出请多多纠正。

❷ element-plus源码学习日志-03

在element-plus的源码探索系列中,今天的重点转向了Dialog组件和Vue3的新特性。首先,我们来到element-plus\packages\dialog\src\index.vue,研究内置的teleport组件。

teleport是个强大的工具,它能让原本作为子组件的DOM元素,通过to属性的指定,直接定位到应用的同级节点,甚至body下。这对于解决层级问题,特别是实现全局弹层时,非常重要。在Vue2时代,我们曾用Vue.extend来创建并挂载在顶层的自定义组件,teleport简化了这一过程。

接着,我们注意到vue3的自定义指令有所更新,涉及生命周期的变动。虽然具体细节还未详尽理解,但官方文档的说明有待后续深入研究。由于vue3支持fragments,组件不再受限于单一节点,这带来了新的挑战,目前暂存疑问。

在代码部分,我们回顾了之前讲解过的内容,通过实际例子,复习了相关知识。今天的收获包括对teleport的深入理解,以及对新版本自定义指令的初步接触。

最后,计划在下篇中,我们将学习如何基于Jest为组件编写单元测试,包括基本用法和测试报告的生成,这是框架开发中的关键步骤。

❸ qq空间日志怎么插入源代码的视频文件

日志添加Flash(视频):必须先找到视频(Flash)的地址,复制以后,打开你的空间,编辑日志,点击写日志里面Flash的标记f,就会出现一个对话框,把复制的地址粘贴到地址栏里,在自定义前面点一下,再填宽度还有高度,大约是700*500,再点击下面的确定,然后浏览一下,可以放出就可以提交日志了,记住视频(Flash)最后的结尾一定要是swf,否则就放不出来了,你可以去试试。(好心态原创回答,请不要复制回答,谢谢!)

❹ 如何在android源代码中打印出日志

1:在编译so文件的c或cpp文件之前中加入以下代码,就可以在android中的log显示日志内容
#include
#define LOG_TAG "show infomation"
#define LOGW(a ) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a)
2:就可以在c或cpp中加入LOWG(str) 就可以在android中的log中显示打印的内容
3.这样写完以后,如果直接编译,就会报 __android_log_write 方法undefined.
怎么回事呢?关键是在设置编译选项上面。
在Android.mk文件里,可以指定一个LOCAL_LDLIBS的参数。如果不指定,那么编译的时候,只会引入默认的几个重要的lib,比如libc之类的。
如果要用log,那就要把 liblog给引进来。
网上很多的写法是 LOCAL_LDLIBS := -llog ,这在build static lib的时候没什么问题。如果是build shared lib,就会报个 cannot find -llog的错误。意思是找不到liblog.so这个库文件。
因此需要改成 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 才可以正常编译。
其中-L参数是指定了搜索lib的路径。
下面是一个android.mk的内容的例子:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestNdkNetwork
LOCAL_SRC_FILES := HttpConnection.cpp
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)

阅读全文

与日志带源码相关的资料

热点内容
方舟自己的服务器怎么搞蓝图 浏览:913
校园网怎么加密ip 浏览:786
kotlin可以编译双端吗 浏览:327
哪个幼儿识字app不要钱 浏览:802
压缩软件的作用 浏览:31
猴子网游app安全吗怎么扫码 浏览:221
哪些系统盘文件夹大 浏览:341
pdf朗读软件手机 浏览:225
ug编程实例教程 浏览:987
cad输入命令时鼠标卡顿 浏览:795
php过滤文件 浏览:757
linux配置ip命令 浏览:903
命令的英文怎么读 浏览:353
哪个app是自己弹音乐的 浏览:655
安卓变是什么意思 浏览:612
qq五子棋在哪里找app 浏览:837
图片活码二维码生成器网站源码 浏览:186
国美手机联系人加密 浏览:883
成交量彩色源码 浏览:118
算法最根本的评价标准 浏览:367