Archive for the ‘Web Server’ Category

给wordpress加上记录Combined格式日志的功能

星期四, 12月 6th, 2007

由于我是合租的web主机,因此开通的ftp里没权限看到站点的access.log,

由于wordpress是通过.htaccess中配置的urlrewrite将http请求重定向到index.php 这个入口,

因此只要在index.php里加上记录日志的操作,基本上大部分请求都可以记录下来,

查了下资料,没看见现成的代码,于是对照着 Combined各式的日志,

自己写了一段代码来实现这个功能.

代码如下:

[code]

<?php
/* Short and sweet */
define(’WP_USE_THEMES’, true);
/**
为我的wordpress增加记录web日志的功能
author: lizongbo
site: http://618119.com
*/

$webaccesslog=”webaccess”.gmdate(”Y-m-d”).”.log”;
$accesslog=$_SERVER['REMOTE_ADDR'].” - - “.gmdate(”[d/M/Y:H:i:s +0800] “);
$accesslog=$accesslog.”\”".$_SERVER["REQUEST_METHOD"].” “.$_SERVER["REQUEST_URI"].” “;
$accesslog=$accesslog.$_SERVER["SERVER_PROTOCOL"].”\”";
$accesslog=$accesslog.” 200 2007 \”";
if(!empty($_SERVER["HTTP_REFERER"])){
$accesslog=$accesslog.$_SERVER["HTTP_REFERER"];
}else{
$accesslog=$accesslog.”-”;
}
$accesslog=$accesslog.”\” \”".$_SERVER["HTTP_USER_AGENT"].”\”".”\r\n”;
$webaccess=fopen($webaccesslog,”a”);
fwrite($webaccess,$accesslog);
/*下面的写法 io 操作太多,被废弃了
fwrite($webaccess,$_SERVER['REMOTE_ADDR']);
fwrite($webaccess,” - - “);
fwrite($webaccess,gmdate (”[d/M/Y:H:i:s +0800] “));//不知道怎么加时区,于是写死了
fwrite($webaccess,”\”");
fwrite($webaccess,$_SERVER["REQUEST_METHOD"]);
fwrite($webaccess,” “);
fwrite($webaccess,$_SERVER["REQUEST_URI"]);
fwrite($webaccess,” “);
fwrite($webaccess,$_SERVER["SERVER_PROTOCOL"]);
fwrite($webaccess,”\”");
fwrite($webaccess,” 200 2007 \”");//强行写死了状态码和内容长度
if(!empty($_SERVER["HTTP_REFERER"])){
fwrite($webaccess,$_SERVER["HTTP_REFERER"]);
}else{
fwrite($webaccess,”-”);
}
fwrite($webaccess,”\” \”");
fwrite($webaccess,$_SERVER["HTTP_USER_AGENT"]);
fwrite($webaccess,”\”");
fwrite($webaccess,”\r\n”);
*/

fclose($webaccess);
require(’./wp-blog-header.php’);
?>

[/code]

这样,记录下来的日志就可以通过ftp下载到本地,然后再用 awstats 进行分析了.

Tags: 618119.com, Apache, log, php, Wordpress

Related posts

Tomcat遇到”Error listenerStart”或”Error filterStart”问题且无详细日志时的log配置.

星期二, 12月 4th, 2007

昨天部署web应用到Tomcat之后,无法成功启动,并且控制台没有详细的错误信息,
顶多就两行提示信息,例如:
严重: Error listenerStart
严重: Context [/lizongbo] startup failed due to previous errors

或者

严重: Error filterStart
org.apache.catalina.core.StandardContext start
严重: Context startup failed due to previous errors

查找logs目录下的信息,除了这两句话,也没别的辅助内容.
给查错带来了困难,在这种情况下,是因为Tomcat自身的默认日志没有将一些错误信息输出到控制台或文件,
这个时候则需要配置Tomcat自身的log,启用详细的调试日志.

Tomcat 5.5和Tomcat 6.0中的配置基本一样,只是相关文件放的目录有所不同.

首先需要准备的文件为:

1.log4j.jar , 下载地址 : http://www.--escaped_anchor:3470e7efc9d2fc0f6a96039a71c7a880--.org/dist/logging/log4j/1.2.15/apache-log4j-1.2.15.zip
2.Tomcat 5.5所需的 commons-logging.jar,下载地址: http://www.--escaped_anchor:3470e7efc9d2fc0f6a96039a71c7a880--.org/dist/commons/logging/binaries/commons-logging-1.1.zip

3.log4j配置文件:
log4j.properties
配置内容为:

log4j.rootLogger=ERROR,R

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p]%t-%c-%m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/lizongbo.log
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%p]%t-%c-%m%n

log4j.logger.org.apache.catalina=INFO,R,CONSOLE

#日志级别不能太低,如果配置为debug的话,输出的日志信息太多,导致tomcat启动非常的慢.

4.Tomcat 6.0所需的juli替换文件:
http://www.--escaped_anchor:3470e7efc9d2fc0f6a96039a71c7a880--.org/dist/tomcat/tomcat-6/v6.0.14/bin/extras/tomcat-juli-adapters.jar
http://www.--escaped_anchor:3470e7efc9d2fc0f6a96039a71c7a880--.org/dist/tomcat/tomcat-6/v6.0.14/bin/extras/tomcat-juli.jar

在Tomcat6.0中,

tomcat-juli-adapters.jar,log4j-1.2.15.jar,log4j.properties复制到D:\Java\ApacheTomcat6.0.14\lib下面.

tomcat-juli.jar复制到D:\Java\apache-tomcat-6.0.14\bin\下面.

然后启动tomcat,就可以在D:\Java\apache-tomcat-6.0.14\logs下看到lizongbo.log了.

在 Tomcat5.5中,

将commons-logging-1.1.jar,log4j-1.2.15.jar,复制到D:\Java\apache-tomcat-5.5.25\common\lib下面.
log4j.properties复制到D:\Java\apache-tomcat-5.5.25\common\classes下面.

然后启动tomcat,就可以在D:\Java\apache-tomcat-5.5.25\logs下看到lizongbo.log了.

在这个时候,再通过日志文件来分析,则会发现出现这种错误的情况可能有:
(以下是我遇到的出错情况,大多是些低级错误)
1.webapps要用到的classe文件根本没有复制到WEB-INF/classes目录下面
(java.lang.NoClassDefFoundError,而这个信息可能默认没输出到控制台,尤其是用了spring的,昨天就是这个粗心的低级错误)
2.要用到lib文件没有复制完,缺少lib
3.lib下的同一个库的jar文件存在多个不同版本,引起版本冲突.
4.lib下的jar与tomcat版本不相对应(我遇到的问题是web应用在Tomcat5.5上运行正常,换到Tomcat6.0上就出错,
例如一个用了struts的webapp在Tomcat 6上报下面的错误
“Parse Fatal Error at line 17 column 6: The processing instruction
target matching “[xX][mM][lL]” is not allowed” )

愿意看英文的可以参考官方网站说明:
http://tomcat.apache.org/tomcat-6.0-doc/logging.html
http://tomcat.apache.org/tomcat-5.5-doc/logging.html

Tags: Apache Tomcat, log4j, Tomcat

Related posts

Netbeans IDE 6.0正式发布了

星期二, 12月 4th, 2007

 Netbeans IDE 6.0正式发布,安装程序都在:
http://dlc.sun.com.edgesuite.net/--escaped_anchor:27e7aed1dc8d54772dccea2de1c4c049--/6.0/final/bundles/
解压版的安装程序在:
http://dlc.sun.com.edgesuite.net/--escaped_anchor:27e7aed1dc8d54772dccea2de1c4c049--/6.0/final/zip/

我下载的是javaee版:

http://dlc.sun.com.edgesuite.net/--escaped_anchor:27e7aed1dc8d54772dccea2de1c4c049--/6.0/final/bundles/netbeans-6.0-javaee-windows.exe

集成了 GlassFish v2Apache Tomcat 6.0.14,安装的时候可以选择不安装GlassFish v2Apache Tomcat 6.0.14,在启动netbeans之后再配置GlassFish v2Apache Tomcat 6.0.14指向已经安装好的目录,节约一点硬盘空间.

GlassFish v2:

http://download.java.net/javaee5/v2.1/promoted/WINNT/glassfish-installer-v2.1-b10-windows.jar

http://download.java.net/javaee5/v2.1/promoted/source/glassfish-v2.1-b10-src.zip

Apache Tomcat6.0.14:

http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.14/bin/apache-tomcat-6.0.14.zip

http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.14/src/apache-tomcat-6.0.14-src.zip
打包了netbeans 6.0的 JDK1.6.03:

http://sunmicro.vo.llnwd.net/c1/--escaped_anchor:27e7aed1dc8d54772dccea2de1c4c049--/6.0/final/bundles/jdk/jdk6-u3-netbeans-6.0-javase-windows.exe

打算 以后将主要使用netbeans进行java开发了.

Tags: Apache Tomcat, GlassFish v2, java ide, JDK, netbeans

Related posts