如何以人类可读的格式输出(到日志)多级数组?

     2023-02-15     286

关键词:

【中文标题】如何以人类可读的格式输出(到日志)多级数组?【英文标题】:How to output (to a log) a multi-level array in a format that is human-readable? 【发布时间】:2012-08-06 18:22:32 【问题描述】:

我正在开发一个 drupal 站点,在调试时,我总是需要通读长的嵌套数组。因此,我一生中的大部分时间都花在使用箭头键、回车键和制表键上,将 1000 多个字符串拆分为嵌套的可读格式。

对于 drupal 开发人员,我不能使用 devel 的 dsm(),因为我正在使用多步骤 #ahah/#ajax 表单,并且我只能将数组输出到错误日志,而不是屏幕。

视觉示例:

邪恶:

array ( 'form_wrapper' => array ( '#tree' => true, '#type' => 'fieldset', '#prefix' => '', '#suffix' => '', '# value' => '', 'name' => 数组 ('#type' => 'textfield', '#title' => NULL, '#size' => 60, '#maxlength' => 60, '# required' => false, '#description' => NULL, '#attributes' => 数组 ('placeholder' => 'Email', ), '#post' => 数组 ('form_wrapper' => 数组 ('name ' => '', '通过' => '', ),
...

好:

array ( 
'form_wrapper' => array ( 
    '#tree' => true, 
    '#type' => 'fieldset', 
    '#prefix' => '<div>', 
    '#suffix' => '</div>', 
    '#value' => '', 
    'name' => array ( 
        '#type' => 'textfield', 
        '#title' => NULL, 
        '#size' => 60, 
        '#maxlength' => 60, 
        '#required' => false, 
        '#description' => NULL, 
        '#attributes' => array ( 
            'placeholder' => 'Email', 
        ), 

编辑:抱歉,我所说的“不输出到屏幕”是指通过 drupal 的系统消息,可以在其中以可点击的嵌套格式(使用 devel.module)输出数组。

【问题讨论】:

'.print_r($array,1).''; ?> 【参考方案1】:

如果您需要将错误记录到 Apache 错误日志中,您可以试试这个:

error_log( print_r($multidimensionalarray, TRUE) );

【讨论】:

看起来是print_r(小写)。 print_R 真的也有效吗? 谢谢@AkhilrajNS 你能告诉我更多关于如何发送插入的查询或在此日志消息上方执行的任何查询吗? @ankitsuthar 你是说 SQL 查询吗? 是的,但我是通过 CI 中的最后一个查询函数得到的。实际上,我想记录一个被插入或编辑、删除的数据。 这是哑巴。这会将换行符输出为文字 \n 而不是实际的换行符。【参考方案2】:

http://php.net/manual/en/function.print-r.php 这个函数可以用来格式化输出,

$output = print_r($array,1);

$output 是一个字符串变量,它可以像其他字符串一样被记录。在纯php中你可以使用trigger_error

例如。 trigger_error($output);

http://php.net/manual/en/function.trigger-error.php

如果还需要格式化成html,可以使用&lt;pre&gt;标签

【讨论】:

阅读问题 - OP 需要为日志输出执行此操作 - 而不是屏幕输出。 @Matt 阅读了答案,if you need to format it also in html @Fivell,我试试。如果您澄清您的答案以解释可以将输出发送到日志文件,我将删除我的 -1。 @Fivell trigger_error 有一个小问题,它将消息限制为最大 1024 长度或类似的长度。使一些更长的var_exports/print_r 字符串被切断。它对于简单的结构很有用。【参考方案3】:

简单的东西:

使用print_rvar_dumpvar_export 应该会做得很好,如果你在查看源模式而不是 HTML 模式下查看结果,或者正如@Joel Larson 所说,如果你将所有内容包装在&lt;pre&gt; 中标记。

print_r 最适合可读性,但它不会打印 null/false 值。

var_dump 最适合检查值类型和长度以及 null/false 值。

var_exportvar_dump 类似,但可用于获取转储字符串。

其中任何一个返回的格式在源代码中都正确缩进,var_export 可用于记录,因为它可用于返回转储的字符串。

高级的东西:

使用 PHP 的 xdebug 插件,它将var_dumps 打印为 HTML 格式的字符串而不是原始转储格式,并且还允许您提供要用于格式化的自定义函数。

【讨论】:

阅读答案var_export允许你返回一个字符串。【参考方案4】:

我只是想知道为什么没有人使用或推荐我更喜欢调试数组的方式:

error_log(json_encode($array));

在我的浏览器旁边我tail我的服务器登录控制台,例如。

tail -f /var/log/apache2/error.log

【讨论】:

【参考方案5】:

Drupal 的Devel module 具有其他有用的功能,包括可以将格式化的数组和对象打印到日志文件的功能。请参阅http://ratatosk.net/drupal/tutorials/debugging-drupal.html 上的指南

dd()

将任何变量记录到名为“drupal_debug.txt”的文件中 站点的临时目录。此函数的所有输出都附加到 日志文件,便于查看变量的内容 修改代码时进行更改。

如果您使用的是 Mac OS X,您可以使用 Logging Console 来监控 日志文件的内容。

如果您使用的是 Linux 风格,您可以使用命令“tail -f drupal_debug.txt”来观察记录到文件中的数据。

【讨论】:

【参考方案6】:

这对你有帮助

echo '&lt;pre&gt;';

$output = print_r($array,1);

echo '&lt;/pre&gt;';

编辑

使用echo '&lt;pre&gt;'; 是没用的,但var_export($var); 会做你期望的事情。

【讨论】:

@Matt 当此参数设置为 TRUE 时,print_r() 将返回信息而不是打印信息。【参考方案7】:

您应该能够在 pre 标记中使用 var_dump()。否则你可以考虑使用像 dump_r.php 这样的库:https://github.com/leeoniya/dump_r.php

我的解决方案不正确。 OP 正在寻找一种用空格格式化的解决方案来存储在日志文件中。

一种解决方案可能是使用带有 var_dump 的输出缓冲,然后 str_replace() 将所有带有空格的选项卡格式化到日志文件中。

【讨论】:

阅读问题 - OP 需要为日志输出执行此操作 - 而不是屏幕输出。 我确实读过这个问题。错过了最后的小评论。谢谢你让我知道。那么这个解决方案就行不通了。【参考方案8】:

语法

print_r(variable, return);

变量必需。指定要返回有关信息的变量

返回可选。当设置为 true 时,此函数将返回信息(不打印)。默认为假

示例

error_log( print_r(<array Variable>, TRUE) );

【讨论】:

以人类可读的格式显示容器弃用日志?

】以人类可读的格式显示容器弃用日志?【英文标题】:Showcontainerdeprecationloginhuman-readableformat?【发布时间】:2022-01-1217:15:27【问题描述】:我有一个Symfony5.3应用程序。容器编译完成后,出现如下文件:var/cache/dev/App_KernelDevDebugC... 查看详情

如何以人类可读的方式格式化 CouchDB 设计文档?

】如何以人类可读的方式格式化CouchDB设计文档?【英文标题】:HowdoIformatCouchDBdesigndocumentsinahumanreadableway?【发布时间】:2013-09-0216:57:20【问题描述】:由于views是用JSON在CouchDB中定义的,我很难以人类可读的方式定义它们。收下... 查看详情

如何以 json 格式(双引号)漂亮地打印(人类可读的打印)Python dict? [复制]

】如何以json格式(双引号)漂亮地打印(人类可读的打印)Pythondict?[复制]【英文标题】:Howtoprettyprint(humanreadablyprint)aPythondictinjsonformat(doublequotes)?[duplicate]【发布时间】:2016-07-0111:40:01【问题描述】:这是thisone的后续问题。我... 查看详情

如何有效地从 jupyter 或 colab 中的数据帧复制输出并以漂亮/可读的格式粘贴到 ***

】如何有效地从jupyter或colab中的数据帧复制输出并以漂亮/可读的格式粘贴到***【英文标题】:Howtoefficeintlycopyoutputfromadataframeinjupyterorcolabandpastefor***withpretty/readableformat【发布时间】:2022-01-2019:55:54【问题描述】:通常,在为***创... 查看详情

格式化日期对象以显示人类可读的日期

】格式化日期对象以显示人类可读的日期【英文标题】:Formattingadateobjecttodisplayahumanreadabledate【发布时间】:2012-08-0322:46:20【问题描述】:这是我想要展示的内容:May13,2012下面是显示的内容:2012-05-13我搜索了一些答案,然后找... 查看详情

从日志文件创建人类可读的 SQL

】从日志文件创建人类可读的SQL【英文标题】:CreatehumanreadableSQLfromLogfiles【发布时间】:2011-10-2114:31:31【问题描述】:我的日志文件包含以下格式的SQL语句:execsp_executeSQL@stmt=N\'SELECTField1,Field2,Field3FROMMyTableWHEREField1=@P1ANDField2=@P2\... 查看详情

如何使用 Mahout 成功运行 kmeans 集群(尤其是获得人类可读的输出)

】如何使用Mahout成功运行kmeans集群(尤其是获得人类可读的输出)【英文标题】:HowtosuccessfullyrunkmeansclusteringusingMahout(esp.gethuman-readableoutput)【发布时间】:2012-06-2501:23:25【问题描述】:我尝试按照许多在线教程来运行Mahout中的km... 查看详情

Terraform 在自动化中计划人类可读的输出

】Terraform在自动化中计划人类可读的输出【英文标题】:Terraformplanhumanreadableoutputinautomation【发布时间】:2020-03-0413:04:01【问题描述】:我已经通过github/jenkins设置了一个自动化,以通过jenkins发布terraformplan的repo输出,作为对githu... 查看详情

java示例代码_REST服务:如何使用XML+XSLT生成人类可读的输出

java示例代码_REST服务:如何使用XML+XSLT生成人类可读的输出 查看详情

如何从 Beacon 数据包中获取人类可读的日期/时间格式

】如何从Beacon数据包中获取人类可读的日期/时间格式【英文标题】:Howtogetahuman-readabledate/timeformatfromBeaconpackets【发布时间】:2018-02-1206:01:11【问题描述】:我想从IEEE802.11[a,b,g,n]无线数据包中获取人类可读的日期/时间格式。我... 查看详情

htop 输出到人类可读文件

】htop输出到人类可读文件【英文标题】:htopoutputtohumanreadablefile【发布时间】:2013-07-0606:07:02【问题描述】:我尝试将htop传递到文本文件(例如htop&gt;text.txt),但它给我的文本因格式化字符串而乱码(见下文)。有没有办法... 查看详情

如何将字符串时间戳更改为人类可读的日期格式? [复制]

】如何将字符串时间戳更改为人类可读的日期格式?[复制]【英文标题】:HowtochangestringtimestampintoHumanreadabledateformat?[duplicate]【发布时间】:2017-07-1910:09:21【问题描述】:我正在尝试将字符串时间戳转换为以下内容:2分钟前。1小... 查看详情

Bash:以人类可读格式将 unix 时间四舍五入到最接近的分钟

】Bash:以人类可读格式将unix时间四舍五入到最接近的分钟【英文标题】:Bash:Roundingupunixtimetothenearestminuteinhumanreadableformat【发布时间】:2017-05-0617:40:33【问题描述】:我有一个纪元时间戳列表,如下所示:1481842799,1481842859,........ 查看详情

以人类可读格式转换纪元时间

】以人类可读格式转换纪元时间【英文标题】:convertingepochtimeinhumanreadableformat【发布时间】:2019-12-0315:33:43【问题描述】:我想将纪元时间转换为人类可读的格式,当我给出随机纪元时间时,例如下面的一个epoch1=datetime.datetime.f... 查看详情

如何使用 ruby​​ on rails 生成人类可读的时间范围

】如何使用ruby​​onrails生成人类可读的时间范围【英文标题】:Howtogenerateahumanreadabletimerangeusingrubyonrails【发布时间】:2011-05-0709:07:53【问题描述】:我正在尝试找到生成以下输出的最佳方法<name>jobtook30seconds<name>jobtook1... 查看详情

将 dict 保存为 JSON,以便它们是人类可读的 [重复]

...格式,就像这个网站一样-https://jsonformatter.curiousconcept.com如何在python中 查看详情

人类可读的 JSON:又名在 json 转储中添加空格和中断

】人类可读的JSON:又名在json转储中添加空格和中断【英文标题】:HumanReadableJSON:akaAddspacesandbreakstojsondump【发布时间】:2011-11-1515:52:55【问题描述】:在某个地方是否有一个“简单”的脚本可以获取json数据并对其进行格式化以... 查看详情

登录可读的 plink 输出(sshlog 太笨拙了)

】登录可读的plink输出(sshlog太笨拙了)【英文标题】:logginginreadableplinkoutput(sshlogistooclumsy)【发布时间】:2018-04-3006:21:27【问题描述】:我正在使用plink.exe登录到远程ssh会话,以使用批处理脚本执行某些任务。在日志文件中以... 查看详情