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有时候会传递一个相对路径,有时候会传递一个绝对路径呢?我实在是不想找原因了。。。

  • 相关阅读:
    day1-python简介+安装
    dgango中admin下添加搜索功能
    调用zabbix 分组api
    python 调用zabbix api实现查询主机信息,输出所有主机ip
    python实现用户登录界面
    怎样过滤跨站恶意脚本攻击(XSS)
    java服务安装(一):使用java service wrapper及maven打zip包
    详解Maven项目利用java service wrapper将Java程序生成Windows服务
    使用tomcat7-maven-plugin部署Web项目
    常用Maven插件介绍
  • 原文地址:https://www.cnblogs.com/hxdoit/p/3866880.html
Copyright © 2011-2022 走看看