老师描述似乎有误

老师描述似乎有误

问题描述:

在视频10:29到11:20的描述如下(老师原话):

RollingFileAppender 是干什么的?其实看名字可以联想到作为 RollingFile,它的含义是生成按天滚动的日志文件,也就是说我们每一天会产生一个日志文件。这样做最大的好处是防止所有日志都记录在一个大的文件中,让我们程序难以解析。

利用 RollingFileAppender 这个输出器向文件中进行写入日志信息,并以天为单位来单独记录。比如我们最近 30 天,那与之对应的就存在 30 个日志文件。如果我们想查询某一天某个时点的数据的话,直接只需要找到那个文件在里边。

进行分析就可以了,作为 RollingFileAppender它称为日滚动文件。

尝试过的解决方式:

这块地方听着感觉逻辑理不顺,RollingFileAppender只是个appender的实现类,并不包含任何按时间滚动的作用吧。单单RollingFileAppender,我们不能称其为日滚动文件吧。

真正实现按时间滚动的应该是TimeBasedRollingPolicy这个类。这里面的按天滚动是通过fileNamePattern元素中的模式字符串指定的。

查到的资料是这样说的:

<fileNamePattern>d:/logs/history.%d.log</fileNamePattern>

在这个模式字符串中,%d 表示日期。默认情况下,%d 的格式为 yyyy-MM-dd,也就是年-月-日。因此,在这个例子中,日志文件将按照每天滚动,每天生成一个新的日志文件,文件名格式为history.yyyy-MM-dd.log

按小时滚动日志文件,可以通过在 %d 后面添加一个 {pattern} 来指定时间格式。例如,按小时滚动的文件名模式可以写成:

<fileNamePattern>d:/logs/history.%d{yyyy-MM-dd_HH}.log</fileNamePattern>

这里的%d{yyyy-MM-dd_HH}表示年-月-日_小时的格式。这样配置后,日志文件将按小时滚动,每小时生成一个新的日志文件,文件名格式为history.yyyy-MM-dd_HH.log


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

    同学你好,同学的理解多数是正确的,但是老师描述的也没有错误,只是在描述的时候,层面不同而已。

    RollingFileAppender中维护了一个RollingPolicy接口的对象,该对象用于控制日志生成的策略(包含如何生成、日志格式等等详细的配置),而TimeBasedRollingPolicy是RollingPolicy接口的实现类。所以在本质上,RollingFileAppender用于向外输出日志,而TimeBasedRollingPolicy控制如何输出。

    举个其他例子就容易比较理解了,例如我们常用的输出语句“System.out.println();”,我们会描述为“System类中用于向控制台输出内容的语句”,而实际上,在其底层是通过PrintStream来进行输出的。如果详细追究的话,System用于控制输出的方向(控制台),PrintStream用于控制如何输出(字节流方式)。

    所以实际上,课程上老师只是没有详细的说明两个类的关系,并不是描述错误。

    祝学习愉快~


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师