发表于: 2020-07-09 23:46:04
1 1329
今天做了什么:
理解messageSource里参数的使用。
补坑:logback日志的配置(以前都是复制粘贴直接用)
String getMessage(String code, Object[] args, String defaultMessage, Locale locale); 用来从MessageSource中获取消息,
当没有获取时使用 默认的消息参数 defaultMessage ;
Object[] args 表示要设置的参数的值,new Object[] { 参数1,参数2,....}
String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException; 此方法没有默认消息,当没有获取时会抛出异常 NoSuchMessageException
工作原理:
1. 当ApplicationContext加载时,他会自动在context 中加载 定义为MessageSource 的bean ,而且此bean 必须命名为 messageSource
2. 如果加载找到了会将方法的调用交给 此bean 来处理,没找到则ApplicationContext 会在 其父类中查找同名的bean,如果找到将会委托给此bean,没找到任何消息bean,则会实例化一个空的 StaticMessageSource来接受此方法的调用。
3. spring 提供了 ResourceBundleMessageSource 和 StaticMessageSource 可以实现消息的处理,一般我们使用 ResourceBundleMessageSource 比较多
logback
配置节点分析图:
Configuration 是根节点
属性:
debug--》用来输出logback内部启动的日志信息。
scan--》当配置文件有改动要不要重新加载,值为true/false
scanPeriod--》隔多长的时间加载,值为30 seconds,
<configuration debug="true" scan="true" scanPeriod="30 seconds">
appender节点
是Configuration的子节点,是负责写日志的组件。appender有两个必要属性name、class 。name指定appender的名称,class指定appender的全限定名class,主要包括:
ch.qos.logback.core.ConsoleAppender 控制台输出
ch.qos.logback.core.FileAppender 文件输出
ch.qos.logback.core.RollingFileAppender 文件滚动输出
rollingFileAppender
滚动纪录文件,先将日志记录到指定文件,当符合某种条件时,将日志记录到其他文件,有如下节点:
<file>:被写入的文件名,可以是相对目录,也可以解决目录,如果目录不存在则自动创建。
<append>:如果是true,日志被追加到文件结尾,如果是false,清空现存文件,默认是true。
<encoder>:对日志进行格式化。
<rollingPolicy>:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。
rollingPolicy
TimeBaseRollingPolicy :最常用的滚动策略,根据时间来制定滚动策略,即负责滚动也负责触发滚动。有如下节点;
<fileNamePattern>:必要节点,包含文件及“%d” 转换符,“%d”可以包含一个java.text.SimpleDateFormat 制定的时间格式,如:%d{yyyy-MM},如果直接使用%d ,默认格式是 yyyy-MM-dd。
<maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,且 是 6,则只保存最近6个月的文件,删除之前的旧文件,注意:删除旧文件是哪些为了归档而创建的目录也会被删除。
<filenamePattern>:必须包含“%i” 例如:设置最小值,和最大值分别为1和2,命名模式为 log%i.log,会产生归档文件log1.log和log2.log,还可以指定文件压缩选项,例如:log%i.log.gz 或者 log%i.log.zip
triggeringPolicy:告知RollingFileAppender,激活RollingFileAppender滚动。
实例:
<appender name="ERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/error.log</file>
<!--输出的模板-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
</encoder>
<!--过滤器配置-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 设置一个等级-->
<level>ERROR</level>
<!-- 如果传来的日志信息是这个等级的就允许输入到error.log文件-->
<onMatch>ACCEPT</onMatch>
<!-- 如果不是就拒绝-->
<onMismatch>DENY</onMismatch>
</filter>
<!--定义滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>error.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
配置控制台输出:
<!-- 控制台配置-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--数据格式化-->
<encoder>
<!--输出的数据模板--><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread][%level] - %m%n</pattern>
</encoder>
</appender>
logger节点
logger是的子节点,来设置某一个包或者具体的某一个类的日志打印级别,以及指定。logger仅有一个name属性,两个可选属性 level/addtivity。
name:用来指定受此loger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关。可选值有TRACE、DEBUG、INFO、WARN、ERROR、ALL和OFF。
还有一个特俗值INHERITED 或者 同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。
addtivity:是否向上级logger传递打印信息,默认为true;
可以包含零个或多个元素,表示这个appender将会添加到logger。
<logger name="logback.olf.log" level="info">
<appender-ref ref = "console_out"/>
<appender-ref ref = "infoAppender"/>
</logger>
root节点
元素配置根logger。该元素有一个level属性,没有name属性,因为已经被命名 为root。Level属性的值大小写无关,其值为下面其中一个字符串:TRACE、DEBUG、INFO、 WARN、ERROR、ALL 和 OFF。如果 root 元素没 有引用任何 appender,就会失去所有 appender。
<root level="debug">
<appender-ref ref="STDOUT"/>
<appender-ref ref="ERROR-OUT"/>
<appender-ref ref="INFO-OUT"/>
<appender-ref ref="DEBUG-OUT"/>
</root>
明天计划的事情:
补坑:SpringMVC的几个注解的作用和原理。
学习springmvc的数据校验。
遇到的问题: null
收获:理解logback日志的文件滚动输出的意思,messageSource的参数使用。
评论