日志管理

在开发时,通常需要记录一些日志(log)方便后期排错和优化。无论是PHP、Apache,还是数据库,都提供了记录日志的功能,在适当的时候打开日志记录功能,有助于我们发现代码的各种问题。
1. PHP日志
PHP本身不是一种严谨的语言,在项目上线时有可能发生各种运行时错误或者警告,虽然可能不会影响产品的使用,但这也许就是潜在的安全问题或性能问题。所以,即使产品已经通过测试并且上线,仍然有必要定期记录日志,定期检查日志文件。
开启PHP的日志记录功能,只需修改php.ini配置文件,代码如下:
log_errors=On
error_log="E:\xampp\php\logs\php_error_log"
配置完成后,重启Web服务器。一旦PHP代码在运行时遇到错误,就会记录到error_log错误日志中。
错误日志的格式为:时间 + 错误级别 + 错误信息 + 发生错误的文件 + 错误所在的代码行。
例如:
[11-Sep-2016 21:51:29 Asia/Shanghai] PHP Fatal error: Cannot redeclare gzdecode() in E:\xampp\htdocs\demo\phprpc\compat.php on line 181
注意: PHP错误日志文件的体积可能很大,特别是在循环语句中出现错误时,因此需要定期检查Log文件,并定期清理。记录log日志不会对PHP的运行效率产生实质性的影响。
2. Apache日志
Apache的日志有两种:错误日志和访问日志。
Apache默认是开启了日志功能的,修改httpd.conf配置文件,代码如下:
ErrorLog "logs/error.log"
LogLevel warn
CustomLog "logs/access.log" combined
ErrorLog是Apache的错误日志。错误日志是最重要的日志,其文件名和位置取决于ErrorLog指令。错误日志中包含了Apache的诊断信息和处理请求时出现的错误,由于这里经常包含出错细节和解决方案,故如果Apache启动时或者运行中产生了问题,应该首先查看这个错误日志。
CustomLog是Apache的访问日志。格式由LogFormat参数控制。
访问日志有很重要的作用,主要体现在:
SEO和网站优化。通过访问日志查看死链,以及来访的蜘蛛等,从而对网站进行针对性地优化。
发现潜在的安全问题。由于访问日志里记录了HTTP请求头、请求地址等信息,可以帮助我们发现一些攻击者构造的非法请求,尤其是以数据库注入为主的攻击。
如果访问日志默认记录的内容满足不了我们的需求,可以对LogFormat进行修改。
对于Apache访问日志,量比较大时,人工查看和分析起来很不方便,这时,可以借助一些现有的软件。
另外,访问量比较大时,可以按日期或文件大小来分文件存储日志,Apache自带分卷工具rotate Logs。
3. MySQL日志
任何一种数据库都有日志。MySQL的日志有四种,分别是错误日志、二进制日志、查询日志和慢查询日志,它们分别记录MySQL数据库不同方面的踪迹。这四种日志都可以通过修改MySQL的my.ini配置文件来进行配置。
(1)错误日志
错误日志记录MySQL启动和停止,以及运行过程中发生的任何错误。默认是开启了错误日志的,如下:
[mysqld]
log_error = "mysql_error.log"
错误日志默认是存放在datadir所指向的目录中。
如果遇到MySQL无法启动的情况,应该首先查看错误日志。
(2)二进制日志
二进制日志也称为binlog日志,它记录了所有更新操作或者潜在的更新操作的所有语句。
二进制日志,默认是没有开启的。可在配置文件中开启二进制日志,配置项如下:
[mysqld]
# 开启二进制日志
log-bin=mysql-bin
配置项log-bin的值为二进制日志文件的文件名,文件的扩展名是一个数字索引,同时会自动创建一个扩展名为 index 的索引文件(如:mysql-bin.index),索引文件里包含了所有的二进制文件的文件名和扩展名。二进制日志默认是存放在datadir所指向的目录中。
binlog日志文件是以binary(二进制)的方式存储的,不能直接查看。但我们可以通过MySQL提供的mysqlbinlog工具来查看,如:
mysqlbinlog E:/xampp/mysql/data/mysql-bin.000001
binlog日志的主要作用是在恢复数据库时能够最大可能地保证数据的完整性,因为binlog日志包含了备份后在数据库进行的所有写操作。另外,binlog日志还用于MySQL的主从复制。
(3)查询日志
查询日志记录Client的所有语句。查询日志默认是没有启用的,可通过下面的配置项启用:
[mysqld]
log = "mysql_query.log"
查询日志默认是存放在datadir所指向的目录中。查询日志是一个文本文件,可用文本编辑器直接打开查看。由于查询日志记录数据库的所有操作,对于访问频繁地系统,此种日志会造成性能影响,建议关闭或者间歇性打开。如果遇到安全问题,也可以从这个日志中进行排除。
(4)慢查询日志
慢查询日志记录执行时间超过参数long_query_time(单位:秒)所设定值的SQL语句日志。默认是没有开启的。可通过配置log-slow-queries选项开启,如下:
[mysqld]
# 慢查询日志存放的位置
log-slow-queries = "E:/xampp/mysql/data/slow.log";
# 查询时间超过这个值的将会被记录,单位为秒
long_query_time = 2
慢查询日志对于追踪有问题的查询语句非常有用,可以分析出当前程序中有哪些很耗费资源的查询语句。该日志对MySQL的性能影响不大,建议打开。慢查询日志是一个文本文件,可用文本编辑器直接打开查看,也可用mysqldumpslow工具进行分析。可以对慢查询日志进行排序,找出最慢的或者返回记录集最大的前几条SQL语句。使用 mysqldumpslow --help 命令,可以查看该命令的所有参数。
根据性能优化常识,优化执行时间最长的语句比优化执行频率高但优化效果不明显的SQL语句获得的收益更大。因此,慢查询日志是MySQL数据库优化的关键依据之一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值