PHP中的日志范例

PHP中的日志范例,php,logging,apache2,Php,Logging,Apache2,仅仅是我,还是其他人在理解PHP中的日志工作方式方面有困难 我来自一个Java/Python日志世界,在那里,您通常可以访问一个内置的日志实用程序,该实用程序允许您指定日志级别或调用日志级别函数(如logger.info('foo');)。然后,核心库将根据配置值组织日志的显示方式以及它在哪个文件中结束 然而,在我阅读的许多文档和谷歌搜索中,我似乎缺少了对PHP日志工作方式的一些基本理解 到目前为止,我发现PHP有: log|u errors=[0 | 1]ini config指令,该指令允

仅仅是我,还是其他人在理解PHP中的日志工作方式方面有困难

我来自一个Java/Python日志世界,在那里,您通常可以访问一个内置的日志实用程序,该实用程序允许您指定日志级别或调用日志级别函数(如
logger.info('foo');
)。然后,核心库将根据配置值组织日志的显示方式以及它在哪个文件中结束

然而,在我阅读的许多文档和谷歌搜索中,我似乎缺少了对PHP日志工作方式的一些基本理解


到目前为止,我发现PHP有:
  • log|u errors=[0 | 1]
    ini config指令,该指令允许记录错误(如果您相信的话)
  • error\u log=/path/to/file
    ,不要与定义错误记录到的文件的
    error\u log()
    函数混淆 关于error_log值的另一个注意事项是,我发现在apache2中,当您将该值设置为绝对路径时,Apache将尊重该值,但是任何其他相对路径将默认为Apache服务器的ErrorLog值(通常
    /var/log/[httpd|apache2 | Apache]/error.log

  • 一个
    syslog()
    error\u log()
    函数,分别将消息延迟到PHP系统记录器(
    /var/log/syslog
    )或SAPI记录器(请参阅和注意
    error\u log
我无法从方法签名控制我记录的消息的级别。(我知道当我收到
非法字符串偏移量
警告或
未定义变量
通知时,我可以看到不同的级别)

现在我意识到我可以自己输出这个级别,但是我相信我不能为了简单的配置而与PHP自己的级别系统集成吗?我选择不这样认为

到目前为止,我所有的搜索都只告诉我如何禁用或启用这些级别,而没有告诉我如何输出具有给定级别的消息

我希望能被引导到一些基本的文件背后的理由登录PHP。。。或者,我可能会因为这个简单的努力而沮丧地吃了我的鞋子

另外,我正在使用Apache2作为我的web服务器

更新:
我可以看到,您可以使用
syslog($ERRNO,$ERRMSG)
登录到syslog,这将设置日志级别(
log\u DEBUG
log\u INFO
等)。在不使用隐式syslog文件的情况下劫持日志级配置会更好。i、 e.
my_error.log
syslog
相反。我开始相信,日志级别是PHP核心的内部概念。

看看这个错误日志和这个例外,我更喜欢让我的应用程序日志远离标准日志。为此,我通常使用apache/log4ppp编写。发行版中有很多示例供您调整“在哪里”记录、记录什么、在什么级别记录。ps.Autoloader是你的朋友。@Yolo,从这个角度看,似乎有人告诉我必须定义一个错误处理程序来检测日志级别并触发我自己的错误,这似乎是一个相当奇怪和麻烦的过程。此外,它在定义的常量中似乎没有调试选项。@YvesLeBorg我希望在核心库中有一些功能,我不反对Composer或Autoloader,但是我对它们的了解很少,我们目前只运行核心PHP。我想我是在问,这是不是一个每个人都必须手工雕刻或作为第三方库包含的函数。最好开始学习如何使用composer。希望它不像Maven那样冗长P
# php internal log examples

[10-Mar-2017 02:45:17 UTC] PHP Warning:  Illegal string offset 'username' in /var/www/html/foobar.php on line 123
[10-Mar-2017 02:45:17 UTC] PHP Notice:  Undefined variable: col_info in /var/www/html/barfoo.php on line 89
[10-Mar-2017 02:45:17 UTC] my message using error_log() function without any level indication.