www.nginx.cnsitemap

存档

文章标签 ‘日志’

Log4J 打印 exception stack trace

2015年2月10日 没有评论

log4j如何打印异常的栈信息
常用的e.printStackTrace(),打印到console里面,不能直接输出到log4j的日志文件。

其中 exception 是java的异常对象。log4j的error方法有两参数,第一个参数是自定义的错误秒速,第二个参数是java抛出的异常(用来打印stack trace)。

例如

分类: java 标签: ,

mysql-bin文件

2014年11月9日 没有评论

mysql的数据存放目录var下有很多文件
-rw-r----- 1 root root 296208 Nov 8 21:51 mysql-bin.000051
-rw-r----- 1 root root 92588461 Nov 8 21:51 mysql-bin.000050
-rw-r----- 1 root root 1331729 Nov 8 21:51 mysql-bin.000061
-rw-r----- 1 root root 4736 Nov 8 21:51 mysql-bin.000060
-rw-r----- 1 root root 5231 Nov 8 21:51 mysql-bin.000059
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000058
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000057
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000056
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000055
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000054
-rw-r----- 1 root root 12670376 Nov 8 21:51 mysql-bin.000053
-rw-r----- 1 root root 9118273 Nov 8 21:51 mysql-bin.000052
导致磁盘空间很快用完,对于小硬盘的vps来说很快就耗尽了vps空间。

这些文件是mysql的日志文件,用来实现主从复制的或者数据恢复的。
对于单机的vps不需要主从复制,我们可以关闭这个功能

1.编辑my.cnf
注释掉
#log-bin=mysql-bin
2.登陆到mysql管理界面,执行reset master删除这些文件
#mysql -u root -p
mysql> reset master;

----------------------

1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';

分类: mysql 标签:

nginx日志记录post的参数

2013年12月30日 1 条评论

nginx的日志通过调整log_format格式可以记录所有请求信息

回答群里盆友一个问题
nginx 日志,可以记录post的参数吗?

答:可以实现,通过设置log_format指令的参数。

log_format指令是用来控制nginx如何记录http请求。

默认的nginx记录日志格式是注释掉的,如果要记录额外的信息,需要自定义log_format格式。
log_format的参数都是nginx内嵌变量,具体含义详见nginx内置变量
默认日志格式

记录post请求参数的日志格式

其实就是增加$request_body字段到log_format里。
如果为了调试程序可以打开开该字段,不然不推荐记录,以免泄露信息给恶意攻击者。

分类: nginx 标签: , ,

nginx php-fpm 输出php错误日志

2013年2月28日 6 条评论

nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息。

nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog

原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。

调试起来就很痛苦了。解决nginx下php-fpm不记录php错误日志的办法:

1.修改php-fpm.conf中配置 没有则增加
catch_workers_output = yes
error_log = log/error_log

2.修改php.ini中配置,没有则增加
log_errors = On
error_log = "/usr/local/lnmp/php/var/log/error_log"
error_reporting=E_ALL&~E_NOTICE

3.重启php-fpm,
当PHP执行错误时就能看到错误日志在"/usr/local/lnmp/php/var/log/error_log"中了

请注意:

1. php-fpm.conf 中的php_admin_value[error_log] 参数 会覆盖php.ini中的 error_log 参数
所以确保你在phpinfo()中看到的最终error_log文件具有可写权限并且没有设置php_admin_value[error_log] 参数,否则错误日志会输出到php-fpm的错误日志里。

2.找不到php.ini位置,使用php的phpinfo()结果查看

3.如何修改PHP错误日志不输出到页面或屏幕上
修改php.ini
display_errors = off //不显示错误信息(不输出到页面或屏幕上)
log_errors = on //记录错误信息(保存到日志文件中)
error_reporting = E_ALL //捕获所有错误信息
error_log = //设置日志文件名

程序中修改以上配置
ini_set("display_errors",0)
ini_set("error_reporting",E_ALL); //这个值好像是个PHP的常量
ini_set("error_log","<日志文件名>")
ini_set("log_errors",1);

4.如何将php的错误日志输出到nginx的错误日志里
在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中
如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中
在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了,错误日志会输出到php-fpm的错误日志里。
所以如果想把php错误日志输出到nginx错误日志,需要使用php5.3.8之前的版本,并且配置文件中php的error_log对于php worker进程不可写

分类: nginx 标签: , , , ,

nginx日志切割

2012年9月24日 9 条评论

nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。

第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。

第二步向nginx主进程发送USR1信号。

nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。

重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。

工作进程立刻打开新的日志文件并关闭重名名的日志文件。

然后你就可以处理旧的日志文件了。

nginx日志按日期自动切割脚本如下

阅读全文...

分类: nginx 标签: , ,