博客系统访问量统计


placeholder image
admin 发布于:2023-03-12 08:58:42
阅读:loading

1.基本介绍

本站的访问数量分为两种,分别是博客文章的访问次数和本站所有页面的访问次数统计,这两个统计实现的功能沿用了历史上的本站v1.0的设计实现,所以当前的v2.0版本也有同样实现。文章的访问次数也是为了精确访问次数,在首次进入页面时发送Ajax请求获取当前文章的访问次数,并且将访问量+1,除了将获取的访问量结果显示在页面,也同样将数据存储在前端sessionStore范围内,达到一次访问只记录一个访问次数(防止手工刷新页面增加访问数量);所有页面的访问次数统计则是利用过滤器来拦截所有URL地址,从中筛选出需要记录的地址,作为访问量进而存储。

在本站v2.0版本上线之初只实现了文章数量的访问统计,而不甘于日常的无所事事,随逐渐增加了全站的访问量(仅限于前端项目,后端的具体访问量没有记录,主要记录的操作日志),所以本站的全站访问量统计主要是使用Filter过滤器实现,参考两种思路:

(1)单独增加Logger输出器AccessResourceLogger,定制日志输出格式为一行输出一个JSON格式的URL数据,排除日期时间、日志级别、线程ID等数据,按每分钟的频率生成日志文件,再配合定时任务来扫描访问数量的日志文件,将数据存储,实现系统访问数量统计,参考实现如下:

    <property name="FILE_LOG_PATTERN_ONLY_CONTENT" value="%msg%n"/>
	
    <appender name="THREAD_RESOURCE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/web/log-access-thread.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN_ONLY_CONTENT}</pattern>
            <charset>UTF-8</charset>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>logs/log-access-thread-%d{yyyy-MM-dd.HH.mm}.log</fileNamePattern>
            <!--日志文件保留时间,单位是分钟此处保留近20分钟的文件-->
            <maxHistory>20</maxHistory>
        </rollingPolicy>
    </appender>

(2)使用队列Queue来存储访问数量,存储请求数据,配合定时任务定时存储访问数据(或者使用Queues.drain的两种队列消费策略),将数据存储,实现系统访问数量统计(本站最终使用的此实现)

2.后端功能

image.png

(按天统计汇总)

image.png

(单日访问量)

3.前端功能

image.png

(页面底部)

image.png

(访问量页)

4.其它说明

(1)系统全站访问量统计功能上线于“2003-03-01”,所有的统计访问次数是从该日期累计;

(2)系统单篇文章的统计在上线之初已具备,但在“2023-03-12”日凌晨全部被清0,从即日起重新计算;


 点赞


 发表评论

当前回复:作者

 评论列表


留言区