在 XLog 里实现 debug 开启 / release 关闭 日志,不需要自己写开关,官方已提供 编译期 + 运行时 两级方案,零运行时开销。...一、build.gradle 里利用 BuildConfig.DEBUG 自动切换 android { ......buildTypes { debug { // debug 版打开 XLog buildConfigField "boolean", "LOG_OPEN", "true" } release...编译时生效,release 版不会打印也不会初始化 if (BuildConfig.LOG_OPEN) { XLog.init(LogLevel.ALL);// 调试版全开 } else { XLog.init...XLog.init(if (BuildConfig.LOG_OPEN) LogLevel.ALL else LogLevel.NONE) } } 四、运行时动态关闭(可选) 若 同一份 APK 想 后台远程关闭日志
一、思考 做 iOS 开发时这个功能很常用, 在 OC 和 Swift 中都可以很轻松实现,因为系统本来就提供了用于日志输出的预处理宏,只要我们拿来拼接就可以了,但是在 Dart 中并不提供这些,那有什么办法实现它呢...我们回想在开发过程中,是不是发现只要一不小心抛异常,就可以看到类似如下的打印内容,而且还能清楚的知道异常是在哪个文件和哪一行的代码造成的。 ?...打印效果 代码: // log.dart enum FLogMode { debug, // ? DEBUG warning, // ?...调用当前函数的函数信息帧 final frame = frames[idx+1]; var modeStr = ""; switch(mode) { case FLogMode.debug...DEBUG"; break; case FLogMode.warning: modeStr = "?
前言 在node程序开发中时,经常需要打印调试日志。用的比较多的是debug模块,比如express框架中就用到了。下文简单举几个例子进行说明。文中相关代码示例,可在这里找到。...备注:node在0.11.3版本也加入了util.debuglog()用于打印调试日志,使用方法跟debug模块大同小异。 基础例子 首先,安装debug模块。...+0ms debug('hello'); 例子:命名空间 当项目程序变得复杂,我们需要对日志进行分类打印,debug支持命令空间,如下所示。...DEBUG=app,api:表示同时打印出命名空间为app、api的调试日志。 DEBUG=a*:支持通配符,所有命名空间为a开头的调试日志都打印出来。...有的时候,我们想要打印出所有的调试日志,除了个别命名空间下的。
打印若干参数的 grad,发现下一步未清零仍保留上一步的数值。️ 场景复现CPU 可跑;分两类错误切换观察。...Debug 过程打印某些参数的 grad 范数与是否为 None若在 backward 前就不是 None,说明上一轮没清干净;若在 opt.step 后仍非 None,多半是没 zero_grad。
打印 model.training,显示为 True 或在评估函数内部被改动过。️ 场景复现保存为 eval_mode_bug.py,CPU 可直接运行。...Debug 过程在评估函数开头打印 model.training 与任意一层的模式print("model.training:", model.training)for m in model.modules
1.日志级别 2.配置 2.1增加config /** * @author dencycheng * @date 2020/11/26 9:59 下午 */ @Configuration public...Logger.Level.FULL; } } 2.2yml配置 logging: level: com.dencycheng.springcloud.service.PaymentFeignService: debug...3.效果 2020-11-26 22:11:19.695 DEBUG 2878 --- [p-nio-80-exec-3] c.d.s.service.PaymentFeignService...getPaymentById] ---> GET http://CLOUD-PAYMENT-SERVICE/payment/get/1 HTTP/1.1 2020-11-26 22:11:19.695 DEBUG
如何打印日志 日志打印对研发来说,是很有必要的, 如何打印好日志,让日志能反映出处理流程,让日志能反映出问题所在,这个很重要,不好的日志,会加大研发排查问题的难度,过多的日志也会对研发造成干扰,如何打印日志...日志存在的问题 安全问题 将用户的敏感信息打印在了日志中 日志级别不合理 warning日志较为泛滥,且少有人关注 部分阻塞业务流程的错误,未正确使用error日志 错误日志重复打印 同一个错误在不同的位置重复打印...日志级别 级别 使用场景 是否需要报警 是否要立即处理 DEBUG 研发调试时使用的日志,生产环境不记录DEBUG日志,生产环境不应打印DEBUG日志 不用 不用 INFO 业务流程的关键信息,可用于线上的...除外) 【建议】谨慎的使用日志进行打点 合理分级 【强制】日志打印时应选择合适的级别 保证安全 【强制】原则上禁止日志汇总禁止打印用户L4级别的日志 【强制】日志打印满足飞书日志打印安全规范 【建议】使用合适的脱敏方式对敏感信息进行脱敏...MQ消息的唯一标记MsgID 案例二:日志打印时未传入ctx导致日志缺乏logID,无法通过logID检索到该日志 案例三:在程序的关键分岔点未打印日志 案例四:在特殊的条件分岔未打印日志 【强制】关键日志必须打印路径
打印优化器状态字典发现为空,或者调度器 last_epoch 与预期不符。️ 场景复现保存为 resume_bug_demo.py,按注释运行两段即可在 CPU 复现。...Debug 过程1️⃣ 检查优化器与调度器状态 打印优化器 state 是否为空、调度器 last_epoch 是否连续。...getattr(scheduler, "last_epoch", None))print("global_step:", global_step)2️⃣ 记录学习率和损失 在 resume 的前 100 步高频打印...3️⃣ AMP 的数值检查 半精度训练中,恢复后打印 scaler.get_scale(),若恢复为默认初值且随即出现溢出/underflow,需要同步加载 scaler 状态。...global_step = state.get("global_step", 0)epoch = state.get("epoch", 0)3️⃣ 训练循环里以 global_step 为唯一驱动 将日志
命令行解决方法:go build -tags nopkcs11 LiteIDE解决办法:编译环境-》自定义-》BUILDARGS:-i -tags nopkc...
二.日志切面 springboot中默认提供的日志打印功能无法打印函数的入参与出参信息。现在如果有个bug在生产环境可以复现,测试环境怎么也复现不了,本地代码又无法连接生产环境进行调试。...生产环境一般一般情况下指挥打印info级别的日志。这个时候就头疼了,无法定位解决问题。 因此线上环境能有一个功能帮我们打印函数的详细的入参或者出参这个功能是很重要的。...当然这个功能默认情况下还是不要开启,毕竟大多数线上环境的调用链封装比较深,出参与入参信息打印会比较多,对于日志的存储会是一个比较大的问题。...>[] excludeReturnClass; //不进行日志打印的类 private static final Class日志拦截这里无法获取到日志拦截数据,或者日志拦截数据拦截到的参数不是当前请求的情况,切在debug的情况下还是正常的。
背景 在打印Ijkplayer播放日志的过程中,在ijkplayer中日志可以正常输出。...但是涉及到FFMpeg的日志,则无法输出 原因 由于FFMPeg中的libavutil/log.c中使用的是fprintf,所以输出到了标准输出中,而Android有自己的一套输出日志的端口。...ff_player.c中的ffp_global_init通过av_log_set_callback注册好回调函数,然后即可通过该函数将ffmpeg库中的输出重定向到ijkplayer中 这步完成后,发现还是打印不出来日志...最后,一怒之下,把ijksdl_log.h中的日志打印都换成了android jni的日志打印,就打印出来了 #ifdef EXTRA_LOG_PRINT #define VLOG(level,...IJK_LOG_UNKNOWN 0 #define IJK_LOG_DEFAULT 1 #define IJK_LOG_VERBOSE 2 #define IJK_LOG_DEBUG
先上图 然后开始 水字数 讲解: 我们可以看到当我们debug设置断点时,如果勾选了黄色区域 Log: "Breakpoint hit" message(日志 "断点命中"消息) 此时当我们的断点触发后...,会打印断点命中时的信息 BreakPoint reached at 类名:行号 旁边还有一个Stack trace 和上面的类似,但会打印出堆栈信息
定义在NuGet包“Microsoft.Extensions.Logging.Debug”中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志消息。...这两个Debug类型针对日志的写入机制也不尽相同,针对.NET Framework的Debug类型定会利用注册到Debug.Listeners属性TraceListener来写日志,默认注册的DefaultTraceListener...会通过调用Win32函数OutputDebugString将格式化的日志消息输出给Debug监视器(Debug Monitor)。...虽然两个Debug类型在API定义和写入日志的实现都不同,但是对于被DebugLogger用来写日志的WriteLine方法来说,它们都具有如下所示的定义方式。...DebugLogger调用Debug的WriteLine方法来进行日志写入体现在它的Log方法中,写入的日志消息将DebugLogger的名称作为日志类型。
使用动态输出在不需要重新编译内核的情况下,方便的打印出内核的debug信息。 要开启动态输出,内核需要添加CONFIG_DYNAMIC_DEBUG。...开启宏之后,pr_debug(),dev_dbg() ,print_hex_dump_debug(),print_hex_dump_bytes()`所有信息都可以被动态打印出来。...这变化操作如下所示: - //移除给定的标记 + //加入给定的标记 = //设置标记到给定的标记上 f //包含已打印消息的函数名 l //包含已在打印消息的行号 m //包含已打印消息的模块名...p //产生一个printk()消息到显示系统启动日志 t //包含了不在中断上下文中产生的消息里的线程ID 传递启动参数给内核 在调试系统启动是时,像USB核心初始化等,这些代码在系统进入shell...也可以使用 tail -f /var/log/dmesg来实时监控dmesg的日志输出。 本文参考 dynamic-debug-howto.txt 《奔跑吧Linux内核》 end
我相信每一个开发者都有打印日志的习惯,好看的日志可以加快调试的速度,可以更好的了解程序中发生的事情。本文分享一个技巧,可以让 Python 在控制台输出彩色的日志。...安装 coloredlogs pip install coloredlogs 使用 首先,和正常打印日志一样,我们创建一个 logger logging.basicConfig() logger =...fmt='[%(name)s] %(asctime)s %(funcName)s %(lineno)-3d %(message)s', level_styles=dict( debug...) logger.addHandler(hdlr=ch) logger.setLevel(level=logging.DEBUG) 接下来就可以输入日志信息了: logger.debug(msg="this...) ## output logger.debug(msg="this is a debug message") logger.info(msg="this is an info message") logger.warning
1.选择恰当的日志级别 error warn info debug 2.日志要打印出参入参数 方便甩锅 3.选择合适的日志格式 时间戳 线程名字 日志级别等 4.if-else ,switch 等分支语句都建议打印日志...,方便排查 5.对一些比较低的日志级别进行判断,使用log.isXXXX()方法判断 如果日志不被记录,但是日志内的字符拼接,对象的toString方法也会执行,浪费性能 6.不建议直接使用log4j...,logback等日志系统,建议使用slf4j框架,方便统一处理 7.建议使用参数占位符{},而不是+拼接,简洁且提升性能 8.建议使用异步日志,能有效提升IO性能 9.不要使用e.printStackTrace...()打印错误信息,因为太多信息,且是堆栈信息,会使得内存溢出 10.异常不要只打一半,要完成输出 11.禁止在线上开启debug 会把磁盘打满 12.不要记录了异常,又抛出异常 13.避免重复打印日志...,浪费磁盘空间 14.日志文件分离,不同级别日志存放在不同文件中 15.核心功能模块,建议打印详细的日志
这种死锁异常一般要在特定时间特定数据和特定业务操作才会复现,有时候处理起来毫无头绪,一般只能从死锁日志下手。本篇文章我们一起来看下 MySQL 的死锁日志。...1.手动打印死锁日志 当业务发生死锁时,首先是线上错误日志报警发现死锁异常,也会提示一些堆栈信息,然后会反馈到数据库层面进行排查。...那有没有办法记录所有的死锁日志呢,我们来看下 MySQL 的系统参数。...不过这会导致错误日志暴增,一般不建议开启这两个参数。 总结: 本篇文章介绍了 MySQL 死锁日志的获取方法,发生死锁后,可以根据死锁日志还获取相关信息。...开启 innodb_print_all_deadlocks 参数可以自动将死锁信息输出到错误日志中,有助于我们及时发现并处理死锁异常。