stackify/log4php

Stackify 为 Apache log4php 提供日志和错误记录

1.3.0 2020-11-06 19:36 UTC

This package is not auto-updated.

Last update: 2024-09-21 14:09:10 UTC


README

PHP version

Stackify log4php Appender

Apache log4php 的 Appender,用于将日志消息和异常发送到 Stackify。支持 Apache log4php >= 2.2.0。

安装

使用 composer require stackify/log4php 安装最新版本

使用 Linux Agent 安装

这是推荐的安装选项,提供最佳的日志性能。

<root>
    ...
    <appender_ref ref="stackifyAppender" />
</root>

<appender name="stackifyAppender" class="\Stackify\Log\Log4php\Appender">
    <param name="appName" value="application_name" />
    <param name="environmentName" value="environment_name" />
</appender>

可选配置

日志服务器环境变量

  • 可以将服务器环境变量添加到错误日志消息元数据中。注意:这会将所有系统环境变量记录下来;如果以这种方式存储敏感信息(如密码或密钥),请勿启用。
<param name="logServerVariables" value="true" />

不使用 Linux Agent 安装

此选项不需要安装 Stackify Agent,因为它直接发送数据到 Stackify 服务。它批量收集日志条目,使用 exec 函数调用 curl,并立即发送数据到后台 [exec('curl ... &')]。这将对应用程序的性能产生最小的影响,但需要权限在 PHP 脚本内部调用 exec,并且如果出现任何网络问题,可能会造成数据丢失。此传输方法在 Windows 上不可用。要配置 ExecTransport,您需要传递环境名称和 API 密钥(许可证密钥)

<root>
    ...
    <appender_ref ref="stackifyAppender" />
</root>

<appender name="stackifyAppender" class="\Stackify\Log\Log4php\Appender">
    <param name="appName" value="application_name" />
    <param name="environmentName" value="environment_name" />
    <param name="mode" value="exec" />
    <param name="apiKey" value="api_key" />
</appender>

可选配置

代理

  • ExecTransport 支持通过代理传输数据。使用 libcurl 格式 指定代理:<[协议://][用户:密码@]代理主机[:端口]>
<param name="proxy" value="https://55.88.22.11:3128" />

Curl 路径

  • 对于 ExecTransport,可以指定 curl 目标路径。此选项默认设置为 'curl'。
<param name="curlPath" value="/usr/bin/curl" />

注意

如果可用,请将异常对象传递给记录器以获取更多错误详情

try {
    $db->connect();
catch (DbException $ex) {
    $logger->error('DB is not available', $ex);
}

添加到 MDCNDC 的所有数据都将自动捕获并附加到您的日志消息。此信息将以 JSON 数据的形式提供,并在 Stackify 中可搜索。

故障排除

如果传输不起作用,请尝试检查 vendor\stackify\logger\src\Stackify\debug\log.log 文件(如果它可供写入)。错误也记录到全局 PHP 错误日志。请注意,ExecTransport 不会产生任何错误,但您可以将它切换到调试模式

<param name="debug" value="1" />

其他配置

对于其他配置,您可以在 XML 或 PHP 文件配置中设置。有关其他选项的参考位于 stackify logger 存储库 Stackify PHP Logger - 配置设置

XML 配置

  • 字符串应该是 JSON 字符串,并使用 HTML 编码(最终将改进这一点。)
// Sample PHP Config
$config = array(
    'Debug' => true,
    'DebugLogPath' => '/path/to/log.log'
);
// 1. Converting PHP array to JSON String
// - String: {"Debug":true,"DebugLogPath":"/path/to/log.log"}
$jsonString = json_encode($config);
// 2. XML Encode the JSON String
//   - ' is replaced with &apos;
//   - " is replaced with &quot;
//   - & is replaced with &amp;
//   - < is replaced with &lt;
//   - > is replaced with &gt;
// - Encoded String: {&quot;Debug&quot;:true,&quot;DebugLogPath&quot;:&quot;/path/to/log.log&quot;}
// - Note: In case the string has new line ("\n") or a carriage return ("\r") character, you still need to escape it
//   - \n should be replaced with &#10; or &#xA;
//   - \r should be replaced with &#13; or &#xD;
// - Reference: https://stackoverflow.com/a/29924176/14542233
$xmlEncode = htmlspecialchars($jsonString, ENT_XML1 | ENT_QUOTES, 'UTF-8');

// 3. Add it as a value on XML Configuration
<param name="config" value="{&quot;Debug&quot;:true,&quot;DebugLogPath&quot;:&quot;/path/to/log.log&quot;}" />

PHP 配置

  • 如果使用 PHP 配置,基本上需要在 Stackify Appender 设置下的 params 中添加 config 属性
<?php
return array(
    'rootLogger' => array(
        'appenders' => array('stackifyAppender'),
    ),
    'appenders' => array(
        'stackifyAppender' => array(
            'class' => '\Stackify\Log\Log4php\Appender',
            'params' => array(
                'appName' => 'application-name',
                'environmentName' => 'environment-name',
                // Additional configuration
                'config' => array(
                    'Debug' => true,
                    'DebugLogPath' => 'logConfig.log'
                )
            )
        )

许可证

版权所有 2019 Stackify, LLC。

本软件依据Apache License,版本2.0(以下简称“许可证”)授权;除非遵守许可证规定,否则不得使用此文件。您可以在以下地址获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或经书面同意,否则在许可证下分发的软件按照“现状”基础分发,不提供任何形式的明示或暗示保证。有关许可证的权限和限制的具体语言,请参阅许可证。