展开

关键词

日志到底该如何打印

今天,我们来看第一个问题: 日志到底该如何打印? 咋一看,这个问题很简单,其实不然,我随手写几个,您看看。 那么,怎么打印日志才是正确的呢? ,比如,用户ID,关键参数,同时,如果是捕获异常里面打印日志,必须把原来的e打印出来,否则,排查日志想死的心都有了。 比如,我最近就遇到一个同学,他把远程调用用一个try catch包着,并在catch中捕获了异常,打印日志"远程调用错误xxx",呵呵,有一次请求失败,非要说远程调用失败,对方出错了,对方说我没收到请求呀 有没有更优雅的日志打印方式呢? 我认为,最好的日志是以解决问题的方式打印日志。 怎么理解呢? 我们以服务注册为例,当注册中心地址不通的时候,我们能不能这样打印呢?

28440

如何安全地打印日志

如何打印日志?这不是很简单,直接使用android.util.Log这个类不就行了? 安全的概念本来就是相对的,如果破解你程序的代价远远大于破解得到的价值,那么就可以认为程序是“安全的”;这里就分析一下,为了提高程序的安全性,在打印日志的时候应该注意什么。 首先看看绝大部分公司以及开发者的做法: 日志开关+日志类 为了在release版本里面没有日志输出,一个最简单的想法是:把所有打印日志的语句放在一个if(DEBUG)的语句里面;在日常开发的时候,DEBUG 让release版本里面不包含日志代码 从上面的分析我们得到一个结论:如果需要程序是“日志安全的”,那么release版本里面不应该存在输出日志的代码。 如何做到这一点呢? 我们可以做一个工具,开发的时候,正常打印日志;一旦需要发布版本,把所有打印日志的语句代码,全部删除掉。代码很简单,用一些正则表达式就可以做到。

83330
  • 广告
    关闭

    开发者专享福利,1988元优惠券限量发放

    带你体验博客、网盘相册搭建部署、视频渲染、模型训练及语音、文字识别等热门场景。云服务器低至65元/年,GPU15元起

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Log日志】在日志系统初始化之前如何打印日志

    之前在文章 使用Nacos简化SpringBoot配置(所有配置放入到Nacos中) 中有实现一个 EnvironmentPostProcessor的扩展接口; 但是发现日志并没有打印出来, 然后就跟着源码找了一下问题 看看日志系统加载的时机 日志系统初始化的地方 LoggingApplicationListener.onApplicationEnvironmentPreparedEvent() ? ; 自然而然的 在这之前的所有日志操作都是无效的; 解决方案 使用 DeferredLog 缓存日志;并在合适的时机回放日志 public class NacosEnvPostProcessor postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { LOGGER.info("打印日志 com.xxx.NacosEnvPostProcessor org.springframework.context.ApplicationListener=com.xxx.NacosEnvPostProcessor 参考文章 java - 如何

    52120

    如何打印Msbuild时的日志信息

    OK,那我们是否可以寻找一种将msbuild日志输出的方法呢? ,方法就是 MSBuild.exe MyProj.csproj ^ /filelogger /fileLoggerParameters:Verbosity=diag 这样就是在你对应的项目下生成编译日志 ,然后通过日志查找就很容易定位到问题了 参考链接:MSBuild: a simple way to find out all properties and their values while building

    40620

    如何打印GC日志排查问题

    在工作当中,有时候我们会需要打印GC的相关信息来定位问题。该如何做呢? 那么上面打印出来的日志,具体是什么意思呢?已经有人画出了很详细的图,我借来用下, ? ? 官方对于 HosSpotJVM GC的详细介绍, https://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html 总结 了解GC日志打印方法 ,并且能看懂GC日志,对于查找定位问题非常有帮助的。 我自己就遇到过生产上一个CPU飙到好几百的情况,打印GC日志发现 JVM 一直在 fullGC,而且每次GC之后内存基本没有变化,从而定位到应用程序可能存在内存泄漏的问题。

    47130

    OpenFeign打印日志

    1.日志级别 ?

    70610

    实时音视频(TRTC)如何打印日志

    开发者在集成 TRTCSDK 过程中,需要调试查看SDK内部打印日志,可以参考以下代码实现日志输出。 1.设置 Log 输出 iOS&Mac: //设置输出 Log 级别为 Debug [TRTCCloud setLogLevel:TRTCLogLevelDebug] //启用控制台日志打印 [TRTCCloud :YES] Android //设置输出 Log 级别为 Debug trtcCloud.setLogLevel(TRTCCloudDef.TRTC_LOG_LEVEL_DEBUG); //启用控制台日志打印 TRTCMainViewController::g_cloud; } //设置输出 Log 级别为 Debug getTRTCCloud()->setLogLevel(TRTC_LOG_LEVEL_DEBUG); //启用控制台日志打印 记录打印信息 3、建议 这里建议开启将日志输出到本地,方便定位和查询问题。

    1.2K71

    聊聊日志打印日志审计

    二.日志切面 ​ springboot中默认提供的日志打印功能无法打印函数的入参与出参信息。现在如果有个bug在生产环境可以复现,测试环境怎么也复现不了,本地代码又无法连接生产环境进行调试。 生产环境一般一般情况下指挥打印info级别的日志。这个时候就头疼了,无法定位解决问题。 ​ 因此线上环境能有一个功能帮我们打印函数的详细的入参或者出参这个功能是很重要的。 当然这个功能默认情况下还是不要开启,毕竟大多数线上环境的调用链封装比较深,出参与入参信息打印会比较多,对于日志的存储会是一个比较大的问题。 >[] excludeReturnClass; //不进行日志打印的类 private static final Class<? 那对于日志数据如何进行解析有两种方式,一种是利用kibana上面默认提供的一些报表功能,另外一种就是需要集成在当前应用系统内的报表数据展示,做二次业务应用开发。 ​

    4810

    Ijkplayer打印FFMpeg日志

    背景 在打印Ijkplayer播放日志的过程中,在ijkplayer中日志可以正常输出。 但是涉及到FFMpeg的日志,则无法输出 原因 由于FFMPeg中的libavutil/log.c中使用的是fprintf,所以输出到了标准输出中,而Android有自己的一套输出日志的端口。 需要使用av_log_set_callback将日志桥接到自定义的函数,然后通过该函数进行重输出。 方案 . ff_player.c中的ffp_global_init通过av_log_set_callback注册好回调函数,然后即可通过该函数将ffmpeg库中的输出重定向到ijkplayer中 这步完成后,发现还是打印不出来日志 最后,一怒之下,把ijksdl_log.h中的日志打印都换成了android jni的日志打印,就打印出来了 #ifdef EXTRA_LOG_PRINT #define VLOG(level,

    1.2K30

    idea打印断点日志

    先上图 然后开始 水字数 讲解: 我们可以看到当我们debug设置断点时,如果勾选了黄色区域 Log: "Breakpoint hit" message(日志 "断点命中"消息) 此时当我们的断点触发后 ,会打印断点命中时的信息 BreakPoint reached at 类名:行号 旁边还有一个Stack trace 和上面的类似,但会打印出堆栈信息

    9220

    python apscheduler 打印日志

    logging.basicConfig() logging.getLogger('apscheduler').setLevel(logging.DEBUG)

    1.9K30

    MySQL打印死锁日志

    这种死锁异常一般要在特定时间特定数据和特定业务操作才会复现,有时候处理起来毫无头绪,一般只能从死锁日志下手。本篇文章我们一起来看下 MySQL 的死锁日志。 1.手动打印死锁日志 当业务发生死锁时,首先是线上错误日志报警发现死锁异常,也会提示一些堆栈信息,然后会反馈到数据库层面进行排查。 那有没有办法记录所有的死锁日志呢,我们来看下 MySQL 的系统参数。 不过这会导致错误日志暴增,一般不建议开启这两个参数。 总结: 本篇文章介绍了 MySQL 死锁日志的获取方法,发生死锁后,可以根据死锁日志还获取相关信息。 开启 innodb_print_all_deadlocks 参数可以自动将死锁信息输出到错误日志中,有助于我们及时发现并处理死锁异常。

    24610

    php开发基础之如何调试打印变量

    调试 wordpress 打开调试功能 //wp-config.php文件内添加 define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG', true ); php打印调用堆栈 $tracelog = ''; $array =debug_backtrace(); unset($array[0]); foreach($array as $row) { \n"; } error_log($tracelog); 打印array变量 error_log(__METHOD__ . PHP_EOL .print_r($postdata, true)); 本文共 120 个字数,平均阅读时长 ≈ 1分钟

    13210

    如何使用PHP创建完整的日志

    当我们想跟踪Web应用程序中执行的事件时,我们需要为其保存日志。 主要有2种用于保存日志以跟踪用户事件的方法。一种是保存日志文件,另一种是保存在数据库中。 在本教程中,我将向您展示如何使用PHP保存完整的日志。 这种方法将帮助您添加与在Web应用程序中执行的特定事件有关的完整信息。 让我们看看如何创建完整的日志。 创建一个文件名functions.php <? > 用法 下面的示例说明了如何使用此功能。要添加完整的日志时,请调用该函数。 <? php include_once('functions.php'); $postvalues = new stdClass(); $postvalues->userid = $userid; $postvalues

    21020

    腾讯实时音视频(TRTC)如何打印日志

    1.设置 Log 输出 iOS&Mac: //设置输出 Log 级别为 Debug [TRTCCloud setLogLevel:TRTCLogLevelDebug] //启用控制台日志打印 [TRTCCloud :YES] Android //设置输出 Log 级别为 Debug trtcCloud.setLogLevel(TRTCCloudDef.TRTC_LOG_LEVEL_DEBUG); //启用控制台日志打印 TRTCMainViewController::g_cloud; } //设置输出 Log 级别为 Debug getTRTCCloud()->setLogLevel(TRTC_LOG_LEVEL_DEBUG); //启用控制台日志打印 编译重新运行 如果您产品已经上线了,线上用户反馈出现问题,开发者跟用户获取 SDK 输出到本地设备的日志,然后进行排查。 %/tencent/liteav/log Web: 打开浏览器控制台,或使用vConsole记录 SDK 打印信息 小程序: 启用<live-pusher>和<live-player>标签的debug

    1.5K73

    没有打印日志如何排查线上问题?——arthas(阿尔萨斯)

    背景 实际工作中,有时候漏打了日志或者线上环境才会出现问题,不得不到线上去复现,导致问题无法及时处理或者线上的包版本与本地的包版本不一样,导致各种种样的问题缺少实际一手的数据进行分析排查问题。 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现 是否有一个全局视角来查看系统的运行状况? 运行 java -jar arthas-boot.jar --repo-mirror aliyun --use-http 查看日志 logger ? 查看dashborad 内存情况 ?

    25520

    打印日志的几种方式

    级别高的日志。 --------------------"); logger.warn("projectVo is " + JSON.toJSONString(projectVo)); } } 如上配置后打印出来的日志如下 -- 文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 --> <! -- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 --> <RollingFile name="RollingFile slf4j和log4j2方式记录<em>日志</em>,我们不需要字符串连接而且不会导致暂时不需要的字符串消耗。取而代之,我们在一个以占位符和参数传递实际值构成的模板格式下写<em>日志</em>信息。

    54840

    iOS Swift怎样打印日志

    前言 Swift 打印日志我们我们都用print 但是我们怎样在打印日志的同时输出 所在的文件和方法呢 在 Swift 中,编译器为我们准备了几个很有用的编译符号,用来处理类似这样的需求,它们分别是:

    1.4K20

    日志打印的正确姿势!

    使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式 : logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol); 对于debug日志,必须判断是否为debug Azure未响应 如果有Throwable信息,需要记录完成的堆栈信息: log.error("获取用户[{}]的用户信息时出错",userName,e); 说明 如果进行了抛出异常操作,请不要记录error日志

    99020

    最简日志打印规范

    本文讲解一个最简的日志打印规范。 事实上,日志打印规范互联网上已有很多,但大多比较冗长(记不住),也不太契合我们团队(关注点不契合)。 日志打印组件 日志组件有很多,日志门面的选择有:Slf4j、Apache Commons Logging等。 不过很多场景下,过多的DEBUG日志,并不是好事,建议是按照业务逻辑的走向打印。打个比方,打印日志就像读书时划重点,如果导出都是重点,也就失去了重点。 日志打印场景 在我们的系统中,不同的日志级别的打印场景大致如下: 日志级别 打印场景 DEBUG 调试日志。目前管理相对宽松,我们暂时没有严格要求。 INFO 业务日志。 WARN 警告日志。一般来说,发生对整个系统没什么影响的异常时,可以打印该级别的日志。 ERROR 错误日志。级别比较高,如果发生一些异常,并且任何时候都需要打印时使用。 4.

    1.9K70

    相关产品

    • 远程调试

      远程调试

      远程调试(Remote Debugging)提供上千台真实手机,随时随地在真机上进行测试,利用云屏技术对测试方式、操作体验进行了优化,随时截图和记录调试日志,帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券