老师描述似乎有误
问题描述:
在视频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。
正在回答
同学你好,同学的理解多数是正确的,但是老师描述的也没有错误,只是在描述的时候,层面不同而已。
RollingFileAppender中维护了一个RollingPolicy接口的对象,该对象用于控制日志生成的策略(包含如何生成、日志格式等等详细的配置),而TimeBasedRollingPolicy是RollingPolicy接口的实现类。所以在本质上,RollingFileAppender用于向外输出日志,而TimeBasedRollingPolicy控制如何输出。
举个其他例子就容易比较理解了,例如我们常用的输出语句“System.out.println();”,我们会描述为“System类中用于向控制台输出内容的语句”,而实际上,在其底层是通过PrintStream来进行输出的。如果详细追究的话,System用于控制输出的方向(控制台),PrintStream用于控制如何输出(字节流方式)。
所以实际上,课程上老师只是没有详细的说明两个类的关系,并不是描述错误。
祝学习愉快~
- 参与学习 人
- 提交作业 8790 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星