日志系统采用logback,相对于log4j,logback有以下优点:
https://blog.csdn.net/caisini_vc/article/details/48551287
- 更快的执行速度
- 充分的测试
- 自动重新载入配置文件
- 优雅地从I/O错误中恢复
- 自动清除旧的日志归档文件
- 自动压缩归档日志文件
sigma代码结构:
SigmaLogEntity定义日志实体
@Data
public class SigmaLogEntity implements Serializable {
/**
* 系統代碼
*/
private String systemCode;
/**
* 子業務
*/
private String source;
/**
* 消息
*/
private String message = "";
/**
* 詳細
*/
private String detail;
/**
*
*/
private String appDomainName = "";
/**
* 進程Id
*/
private Long processId;
/**
* 進程名稱
*/
private String processName;
/**
* ip地址
*/
private String ipAddress;
/**
* 線程Id
*/
private Long threadId;
/**
* 創建日期
*/
private String createTime;
/**
* 機器名稱
*/
private String machineName;
/**
* 日誌級別
*/
@JsonIgnore
private Level level;
}
SigmaLoggingAppender继承BaseSigmaLoggingAppender,重写convert()和send()两个方法
convert():
/**
* 日誌轉換
*
* @param loggingEvent 日誌對象
* @return 構造對象
*/
@Override
protected SigmaLogEntity convert(ILoggingEvent loggingEvent) {
DateTimeFormatter simpleDateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
var sigmaLogEntity = new SigmaLogEntity();
sigmaLogEntity.setSystemCode(systemCode);
sigmaLogEntity.setSource(sourceCode);
sigmaLogEntity.setCreateTime(simpleDateFormat.format(LocalDateTime.now()));
sigmaLogEntity.setLevel(loggingEvent.getLevel());
sigmaLogEntity.setMessage(loggingEvent.getMessage());
sigmaLogEntity.setThreadId(Thread.currentThread().getId());
sigmaLogEntity.setMachineName(machineName);
sigmaLogEntity.setDetail(loggingEvent.getFormattedMessage());
sigmaLogEntity.setIpAddress(ipAddress);
sigmaLogEntity.setAppDomainName("");
sigmaLogEntity.setProcessId(Long.parseLong(ManagementFactory.getRuntimeMXBean().getName().split("@")[0]));
sigmaLogEntity.setProcessName(ManagementFactory.getRuntimeMXBean().getName());
return sigmaLogEntity;
}
/**
* 日誌發送
*
* @param entity 對象
*/
protected void send(SigmaLogEntity entity) {
var response = restTemplate.postForObject(getUrlByLevel(entity.getLevel()), entity, String.class);
System.out.println("send to es success:" + response);
}
TravelPort1.0中应用logback,并通过sigma发送日志到日志系统(spring boot 集成ELK)
pom.xml加入sigma依赖:
<dependency>
<groupId>com.sigma</groupId>
<artifactId>sigma-core</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.sigma</groupId>
<artifactId>sigma-logging</artifactId>
<version>1.0.0</version>
</dependency>
在resources下加入logback-spring.xml文件,
测试代码:
@SpringBootTest
@RunWith(SpringRunner.class)
public class TravelportConfigTest {
@Autowired
TravelportConfig travelportConfig;
private static Logger LOGGER = (Logger) LoggerFactory.getLogger(TravelportConfigTest.class);
@Test
public void displayTravelConfig() {
LOGGER.debug("test debug----------------------------------");
LOGGER.info("test info------------------------------------");
LOGGER.error("test error----------------------------------");
LOGGER.trace("test trace----------------------------------");
System.out.println(travelportConfig);
}
}
运行结束后即可在kibana中查看到日志。
日志系统流程图: