Apache中对access.log文件日期格式的设置
公司有个项目要利用Apache的access.log对网站进行统计,由于网站的域名有150多个,所以是在程序(J2ee)中实现的虚拟主机,
但access.log中默认的日期格式不能直接存入数据库中,所以查了些资料对%t进行了设置,可以直接将格式文本取出存入数据库
1、打开httpd.conf文件
2、找到如下代码:
LogFormat "%h %l %u %t \"%r\" \"%{Referer}i\" \"%{User-Agent}i\"" combined
3、修改%t
LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t \"%r\" \"%{Referer}i\" \"%{User-Agent}i\"" combined
4、在Apache手册中可以查到对%{format}t中的format是采用的C标准库中的strftime函数,所以可以根据需要设置直接想要的格式
localtime#include
struct tm *localtime(const time_t *tp);
将*tp中的日历时间转换成struct tm结构形式的本地时间,并返回指向该结构的指针。结构内容存储在可被其他调用重写的静态对象中。
*strftime#include
size_t strftime(char *s, size_t smax, const char *fmt, \const struct tm *tp);
根据fmt的格式说明把结构*tp中的日期与时间信息转换成指定的格式,并存储到s所指向的数组中,写到s中的字符数不能多于smax。函数返回实际写到s中的字符数(不包括'\0');如果产生的字符数多于smax,则返回0。
fmt类似于printf()中的格式说明,它由0个或多个转换规格说明与普通字符组成。普通字符原封不动的拷贝到s中,每个%c按照下面所描述的格式用与当地环境相适应的值来替换。转换规格列表如下:
格式
说明
%a
一星期中各天的缩写名
%A
一星期中各天的全名
%b
缩写月份名
%B
月份全名
%c
当地时间和日期表示
%d
用整数表示的一个月中的第几天(01~31)
%H
用整数表示的时(24小时制,00~23)
%I
用整数表示的时(12小时制,01~12)
%j
用整数表示的一年中各天(001~366)
%m
用整数表示的月份(01~12)
%M
用整数表示的分(00~59)
%p
与AM/PM对应的当地表示方法
%S
用整数表示的秒(00~61)
%U
用整数表示一年中的星期数(00~53,将星期日看作为每周的第一天)
%w
用整数表示一周中的各天(0~6,星期日为0)
%W
用整数表示一年中的星期数(00~53,将星期一看作为每周的第一天)
%x
当地日期表示
%X
当地时间表示
%y
不带公元的年(00~99)
%Y
完整年份表示
%Z
时区名字(可获得时)
%%
%本身