发表于: 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的参数使用。



返回列表 返回列表
评论

    分享到