zoukankan      html  css  js  c++  java
  • 为什么日志记录到别的目录了?

    登录到服务器查看的时候,发现工作目录中有很多日志文件和core文件

    pwd : /home/work/anti

    -rw-rw-r-- 1 work work 2738 Jul 18 21:22 14_07_18.log
    -rw-rw-r-- 1 work work 1829 Jul 19 02:35 14_07_19.log
    -rw-rw-r-- 1 work work 1590 Jul 21 06:40 14_07_21.log
    -rw-rw-r-- 1 work work 1884 Jul 22 17:03 14_07_22.log
    -rw-rw-r-- 1 work work 1745 Jul 23 12:11 14_07_23.log

    -rw------- 1 work work 127094784 Jul 8 17:42 core.15330
    -rw------- 1 work work 353038336 Jul 8 17:33 core.22368

    项目的日志文件并没有指定到这个位置呀,开始怀疑是配置错了,于是找php.ini,thinkphp框架的配置文件,php-fpm.conf等相关的配置文件

    还是没有发现哪个地方配置了日志要写到这个目录

    于是追原因,我发现thinkphp框架写日志的时候,最终会落到一个函数

    Protected/ThinkPHP/Library/Think/Log/Driver/File.class.php

    public function write($log,$destination='') {...

    var_dump($destination);

    其中$destination是日志的位置,于是用上面红色的代码打印变量如下:

    有两种情况:

    情况1,日志正确的位置 :/home/work/huangxuan/anti/Protected/Application/Runtime/Logs/14_07_25.log

    情况2,日志错误的位置 :14_07_25.log

    我们发现日志之所以出现在了错误的位置,是因为参数只有一个日志名,没有路径。但为什么这样呢?

    原来把14_07_25.log参数传递给PHP时,PHP调用操作系统写日志的时候,把14_07_25.log传递给了操作系统,操作系统发现14_07_25.log是个相对路径,就会以当前程序运行的目录为参照物,形成绝对路径,于是日志就写在我的工作目录中了。

    我们知道一个程序运行的时候,会有一个运行目录,默认我们程序在哪里启动,哪里就是它的工作目录,因为我们的php-fpm进程是在我的工作目录中启动,所以我的工作目录就变成了它的工作目录。

    这同时也解释了为什么core文件也同时产生在我的工作目录。

    为了验证我的想法,我把php-fpm进程kill掉,在别的目录重新启动php-fpm进程,日志果然产生在了别的目录中;同时我们kill -SIGSEGV 8888(php-fpm的pid),来模拟程序段错误(段错误的时候会生成core文件),果然一个core文件也产生了。

    至于为什么thinkphp有时候会传递一个相对路径,有时候会传递一个绝对路径呢?我实在是不想找原因了。。。

  • 相关阅读:
    POJ 3352&&3177 (割边 && 边双连通分量)
    .net程序员的盲点(二):两个“属性”引起的歧异
    .net程序员的盲点(一):参数修饰符ref,out ,params的区别
    .net程序员的盲点(一):参数修饰符ref,out ,params的区别
    args argc argv 的意思以及英文缩写
    .net程序员的盲点(一):参数修饰符ref,out ,params的区别
    .net程序员的盲点(一):参数修饰符ref,out ,params的区别
    .net程序员的盲点(一):参数修饰符ref,out ,params的区别
    args argc argv 的意思以及英文缩写
    args argc argv 的意思以及英文缩写
  • 原文地址:https://www.cnblogs.com/hxdoit/p/3866880.html
Copyright © 2011-2022 走看看