springboot 记录打印日志到本地文件夹

<?xml version="1.0" encoding="UTF-8"?>
<!-- 说明: 1、日志级别及文件 日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中 例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志,
		日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名 例如log-level-2013-12-21.0.log
		其它级别的日志也是如此。 2、文件路径 若开发、测试用,在Eclipse中运行项目,则到Eclipse的安装路径查找logs文件夹,以相对路径../logs。
		若部署到Tomcat下,则在Tomcat下的logs文件中 3、Appender FILEERROR对应error级别,文件名以log-error-xxx.log形式命名
		FILEWARN对应warn级别,文件名以log-warn-xxx.log形式命名 FILEINFO对应info级别,文件名以log-info-xxx.log形式命名
		FILEDEBUG对应debug级别,文件名以log-debug-xxx.log形式命名 stdout将日志信息输出到控制上,为方便开发测试使用 -->
<configuration>

    <!--ip解析-->
    <conversionRule conversionWord="ip" converterClass="cn.zx.webapp.configuration.IpConvert"/>
    <!-- magenta:洋红 -->
    <!-- boldMagenta:粗红-->
    <!-- cyan:青色 -->
    <!--︻$════>-->
    <!--︻⊱═════>-->
    <property name="CONSOLE_LOG_PATTERN"
              value="%boldMagenta([%d{yyyy-MM-dd HH:mm:ss.SSS}]) %green([%ip]) %cyan([%X{requestId}]) %boldMagenta(%-5level) %blue(%logger{15}) %red([%thread])   %magenta(︻⊱═════>) %cyan(%msg%n)"/>

    <!--引入默认的一些设置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!--写入日志到控制台的appender,以java -jar xx.jar 启动会乱码 需要去掉 charset-->
    <appender name="CONSOLE"
              class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!--<charset>UTF-8</charset>&lt;!&ndash; 此处设置字符集 &ndash;&gt;-->
        </encoder>
    </appender>


    <!-- 日志文件的存储地址 -->
    <property name="LOG_HOME"
              value="${LOG_PATH:-.}" />


    <!--写入INFO日志到文件的appender -->
    <appender name="INFO_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高, 所以我们使用下面的策略,可以避免输出
            Error 的日志 -->
        <!-- 此日志文档只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>                     <!--设置拦截的对象为INFO级别日志 -->
            <onMatch>ACCEPT</onMatch>               <!-- 当遇到了info级别时,启用改段配置. -->
            <onMismatch>DENY</onMismatch>           <!-- 没有遇到info级别日志时,屏蔽改段配置 -->
        </filter>

        <File>${LOG_HOME}/zx-info.log</File>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/zx-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日志文档保留天数 -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 注意 logback 的括号需要转义 -->
        <encoder charset="UTF-8"
                 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
                %logger{10} %method\(\) - %m%n
            </pattern>
            <charset>UTF-8</charset><!-- 此处设置字符集 -->
        </encoder>
    </appender>


    <!--写入DEBUG日志到文件的appender -->
    <appender name="DEBUG_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 此日志文档只记录DEBUG级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <File>${LOG_HOME}/zx-debug.log</File>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/zx-debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日志文档保留天数 -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 注意 logback 的括号需要转义 -->
        <encoder charset="UTF-8"
                 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
                %logger{10} %method\(\) - %m%n
            </pattern>
            <charset>UTF-8</charset><!-- 此处设置字符集 -->
        </encoder>
    </appender>


    <!--写入ERROR日志到文件的appender -->
    <appender name="ERROR_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 此日志文档只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <File>${LOG_HOME}/zx-error.log</File>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/zx-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日志文档保留天数 -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 注意 logback 的括号需要转义 -->
        <encoder charset="UTF-8"
                 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
                %logger{10} %method\(\) - %m%n
            </pattern>
            <charset>UTF-8</charset><!-- 此处设置字符集 -->
        </encoder>
    </appender>

    <!--写入WARN日志到文件的appender -->
    <appender name="WARN_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 此日志文档只记录WARN级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <File>${LOG_HOME}/zx-warn.log</File>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/zx-warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日志文档保留天数 -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <!-- 注意 logback 的括号需要转义 -->
        <encoder charset="UTF-8"
                 class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level \(%F:%L\)
                %logger{10} %method\(\) - %m%n
            </pattern>
            <charset>UTF-8</charset><!-- 此处设置字符集 -->
        </encoder>
    </appender>


    <!--生产环境:打印控制台和输出到文件 -->
    <springProfile name="pro">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="ERROR_FILE"/>
        </root>
    </springProfile>

    <!--开发环境:打印控制台 -->
    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="DEBUG_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
            <appender-ref ref="WARN_FILE"/>
        </root>
    </springProfile>

    <!--测试环境:打印控制台 -->
    <springProfile name="test">
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="INFO_FILE"/>
            <appender-ref ref="ERROR_FILE"/>
            <appender-ref ref="WARN_FILE"/>
        </root>
    </springProfile>

</configuration>

logback-spring.xml文件;  

<!-- 日志文件的存储地址 -->

<property name="LOG_HOME" value="${LOG_PATH:-.}" />  获取在yml中配置的路径;例如:

logging:
  path: /home/logs/xxx/log/  不写磁盘默认在本项目下.

 RollingFileAppender:  file(String) 指定日志文件的位置滚动策略 


 RollingPolicy: 
   TimeBasedRollingPolicy 是目前最受欢迎的一种滚动方式,可以设置按天、按月的滚动。它同时实现了 RollingPolicy 和TriggeringPolicy 接口。它可以配置这些属性:
  1. fileNamePattern (String) 比如:/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log ,这里最重要的是 %d{},用它来格式化一个时间日期,作为一个文件名。

  2. maxHistory (int) 最多保存的日志数量

    %i 标记,它的使用场景是这样的,如果log文件的大小达到了maxFileSize,但是时间还没有达到滚动点,那么会创建新的log文件,并用一个递增的 %i 索引。

在RollingFileAppender还是需要设置file属性来表示当前的写入日志的文件,但是当滚动时间到了,会按照fileNamePattern定义的规则来 归档当前的日志写入文件。logback会从 
fileNamePattern 中推导出滚动的间隔,上面的例子会按月创建日志目录、日志文件会在每天0点归档。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章