Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在json_encode中使用多个数组进行日志管理_Php_Arrays_Json_Jsondecoder_Jsonencoder - Fatal编程技术网

Php 在json_encode中使用多个数组进行日志管理

Php 在json_encode中使用多个数组进行日志管理,php,arrays,json,jsondecoder,jsonencoder,Php,Arrays,Json,Jsondecoder,Jsonencoder,我已经找了好几天了,读了很多文章,但我没有找到任何答案 这是我的问题:我正在重新设计CodeIgniter 3.XX上的日志管理 我收集数组中每个日志消息的数据,如下所示: $log_message['date'] = $date $log_message['severity'] = $severity $log_message['message'] = $message 等等。 从每个日志消息中收集数据并将其放入阵列中是没有问题的 问题是,我想对数据进行json编码,并在另一个控制器中对其进

我已经找了好几天了,读了很多文章,但我没有找到任何答案

这是我的问题:我正在重新设计CodeIgniter 3.XX上的日志管理

我收集数组中每个日志消息的数据,如下所示:

$log_message['date'] = $date
$log_message['severity'] = $severity
$log_message['message'] = $message
等等。 从每个日志消息中收集数据并将其放入阵列中是没有问题的

问题是,我想对数据进行json编码,并在另一个控制器中对其进行解码,以便在仪表板上显示它们

所以我用
$log\u message=json\u encode($log\u message、json\u PRETTY\u PRINT、json\u UNESCAPED\u斜线)

结果如下:

{
    "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
    "level": "ERROR",
    "date": "2019-10-21 16:53:24",
    "short_message": "Users.php 2055",
    "severity": "Compile",
    "ip": "",
    "trace": [
        "core/Common.php MY_Exceptions->log_exception() (line:618)"
    ],
    "short_trace": "core/Common.php MY_Exceptions->log_exception() (line:618)",
    "uri": "[POST] /api/users/user"
}


几次留言后,我得到了以下信息:

{
    "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
    "level": "ERROR",
    "date": "2019-10-21 16:53:24",
    "short_message": "Users.php 2055",
    "severity": "Compile",
    "ip": "",
    "trace": [
        "core/Common.php MY_Exceptions->log_exception() (line:618)"
    ],
    "short_trace": "core/Common.php MY_Exceptions->log_exception() (line:618)",
    "uri": "[POST] /api/users/user"
}{
    "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
    "level": "ERROR",
    "date": "2019-10-21 16:53:24",
    "short_message": "Users.php 2055",
    "severity": "Compile",
    "ip": "",
    "trace": [
        "core/Common.php MY_Exceptions->log_exception() (line:618)"
    ],
    "short_trace": "core/Common.php MY_Exceptions->log_exception() (line:618)",
    "uri": "[POST] /api/users/user"
}
但是当我想要对我的文件进行json_解码时,它并不被视为json数组,所以我在每个表页之间添加了一个“,”来分隔它们,但我需要找到一种方法,在开始时写一个“[”,在结束时写一个“]”,因为我知道新的日志消息会增加文件。 你知道怎么做吗


感谢您的建议,如果我的问题不清楚或可读性不好,请告诉我

试试这个,这样您就可以创建一个数组了

$line['date'] = $date;
$line['severity'] = $severity;
$line['message'] = $message;

$log_message[] = $line;
当您完成加载数据时,一个简单的

$messages = json_encode($log_message);
应该足够了,然后当您解码时,它应该作为一个对象数组很好地解码

更好的示例代码

$line = [
        "message" => "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
        "level" => "ERROR",
        "date" => "2019-10-21 16:53:24",
        "short_message" => "Users.php 2055",
        "severity" => "Compile",
        "ip" => "",
        "trace" => ["core/Common.php MY_Exceptions->log_exception() (line:618)"],
        "short_trace" => "core/Common.php MY_Exceptions->log_exception() (line:618)",
        "uri" => "[POST] /api/users/user"
        ];

$log_message[] = $line;

$line = [
        "message" => "Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055",
        "level" => "ERROR",
        "date" => "2019-10-21 16:53:24",
        "short_message" => "Users.php 2055",
        "severity" => "Compile",
        "ip" => "",
        "trace" => ["core/Common.php MY_Exceptions->log_exception() (line:618)"],
        "short_trace" => "core/Common.php MY_Exceptions->log_exception() (line:618)",
        "uri" => "[POST] /api/users/user"
        ];

$log_message[] = $line;

$messages = json_encode($log_message, JSON_PRETTY_PRINT );
print $messages;

$arr = json_decode($messages);
print_r($arr);
结果: JSON字符串-预打印

[
    {
        "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() \/application\/controllers\/api\/Users.php 2055",
        "level": "ERROR",
        "date": "2019-10-21 16:53:24",
        "short_message": "Users.php 2055",
        "severity": "Compile",
        "ip": "",
        "trace": [
            "core\/Common.php MY_Exceptions->log_exception() (line:618)"
        ],
        "short_trace": "core\/Common.php MY_Exceptions->log_exception() (line:618)",
        "uri": "[POST] \/api\/users\/user"
    },
    {
        "message": "Severity: Compile Error --> Cannot redeclare Users::update_password_post() \/application\/controllers\/api\/Users.php 2055",
        "level": "ERROR",
        "date": "2019-10-21 16:53:24",
        "short_message": "Users.php 2055",
        "severity": "Compile",
        "ip": "",
        "trace": [
            "core\/Common.php MY_Exceptions->log_exception() (line:618)"
        ],
        "short_trace": "core\/Common.php MY_Exceptions->log_exception() (line:618)",
        "uri": "[POST] \/api\/users\/user"
    }
打印($arr)

Array
(
    [0] => stdClass Object
        (
            [message] => Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055
            [level] => ERROR
            [date] => 2019-10-21 16:53:24
            [short_message] => Users.php 2055
            [severity] => Compile
            [ip] => 
            [trace] => Array
                (
                    [0] => core/Common.php MY_Exceptions->log_exception() (line:618)
                )

            [short_trace] => core/Common.php MY_Exceptions->log_exception() (line:618)
            [uri] => [POST] /api/users/user
        )

    [1] => stdClass Object
        (
            [message] => Severity: Compile Error --> Cannot redeclare Users::update_password_post() /application/controllers/api/Users.php 2055
            [level] => ERROR
            [date] => 2019-10-21 16:53:24
            [short_message] => Users.php 2055
            [severity] => Compile
            [ip] => 
            [trace] => Array
                (
                    [0] => core/Common.php MY_Exceptions->log_exception() (line:618)
                )

            [short_trace] => core/Common.php MY_Exceptions->log_exception() (line:618)
            [uri] => [POST] /api/users/user
        )

)

谢谢你的建议,但是现在当我想验证我的json时,我得到了多个json根元素错误,因为我的数组的末尾和开头都有“][”。也许正则表达式可以完成这项工作?这段代码不会创建这些。那么你是如何真正创建json字符串的呢?我今天早上在工作中尝试过这种方式:$log[]=$log\u message;$logs=json\u encode($log,json\u UNESCAPED\u SLASHES);问题是一样的,我仍然在每条消息中得到一个数组,如下所示:[{array}][{array}]谢谢你的帮助,我使用并修改了你的代码,它工作正常!