logback配置两套日志路径

日志推送工作根据公司日志管理规范及国家攻防演练需要,请协助对所有应用重要场景的日志进行收集,需求如下:

1、涉及场景:
用户登录场景
密码修改场景
密码找回场景
注册场景

2、日志字段需求及格式:
filebeat对接日志格式:
登录,修改,注册,找回
系统编码|日志类型|主机名|端口|URI|提交的内容|返回的内容|响应码|客户端IP|用户名|登陆时间|是否成功|失败原因|
第二个字段是日志类型,按如下设定
登陆是sec-login,修改是sec-modify,注册是sec-register,找回是sec-retrieve
3、日志推送方式:
filebeat
kafka
这里用了SpringBoot LogBack文件配置了下:

logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <!--    log不同环境日志存放路径可自定义 如下: -->
    <!-- 生产环境 -->
    <springProfile name="prod">
        <springProperty name="LOG_PATH" source="logging.path" defaultValue="/app/user/User-web/logs"/>
    </springProfile>
    <!-- 测试环境 -->
    <springProfile name="dev">
        <springProperty name="LOG_PATH" source="logging.path" defaultValue="/app/User-web/logs"/>
    </springProfile>
    <!--自定义控制台日志格式-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
             <!-- 日志文件的格式 可根据需要自行配置-->
            <pattern>%d{yyy-MM-dd HH:mm:ss.SSS} -%-5level ${PID:- } --- [%t] %-40.40logger{39}[lineno:%line]: %msg%n</pattern>
        </encoder>
    </appender>
    <!--系统INFO级别日志-滚动记录日志-->
    <appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值-->
        <File>${LOG_PATH}/user-web.log</File>
        <!--如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。-->
        <append>true</append>
        <!-- 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--设置滚动文件规则,如果直接使用 %d,默认格式是 yyyy-MM-dd-->
            <fileNamePattern>${log.LOG_PATH}/Main_info-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!--保留5天的日志,5天的压缩文件是可以发现问题并且解决问题的最长时间-->
            <maxHistory>5</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大128MB时会被压缩和切割 -->
                <maxFileSize>10 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d{yyy-MM-dd HH:mm:ss.SSS} -%-5level ${PID:- } --- [%t] %-40.40logger{39}[lineno:%line]: %msg%n</pattern>
        </encoder>
    </appender>


    <!--业务LOGIN成功日志-->
    <appender name="Login_Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/user-web-login.log</File>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--设置滚动文件规则,如果直接使用 %d,默认格式是 yyyy-MM-dd-->
            <fileNamePattern>${log.LOG_PATH}/Login入口-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!--保留5天的日志,5天的压缩文件是可以发现问题并且解决问题的最长时间-->
            <maxHistory>5</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大128MB时会被压缩和切割 -->
                <maxFileSize>10 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 下面就是根据业务-->
    <logger name="login_log" additivity="false" level="INFO">
        <appender-ref ref="Login_Appender"/>
    </logger>

    <!--info和error分开打印,注:ERROR > WARN > INFO > DEBUG > TRACE-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="SYS_INFO"/>
    </root>
</configuration>

这样就配置完两套日志路径了,下面建了个工具类,把涉及场景所需的日志内容添加到工具类,java开发过程中经常需要打印日志信息,往往会在每个类的第一行加上形如图代码,然后按照需求加上就行所需的日志内容,如:
logback配置两套日志路径
加入涉及场景所需的日志内容,输出日志
logback配置两套日志路径
然后在对应场景调用日志工具类就行了

上一篇:springboot+logback日志输出


下一篇:【神经网络】学习笔记十七——IRNN:初始化矩阵RNN