日志推送工作根据公司日志管理规范及国家攻防演练需要,请协助对所有应用重要场景的日志进行收集,需求如下:
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开发过程中经常需要打印日志信息,往往会在每个类的第一行加上形如图代码,然后按照需求加上就行所需的日志内容,如:
加入涉及场景所需的日志内容,输出日志
然后在对应场景调用日志工具类就行了