Java 系统中日志如何进行设置呢?
Posted 赵晓东-Nastu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 系统中日志如何进行设置呢?相关的知识,希望对你有一定的参考价值。
一、场景
我们可以想想系统中有可能数据是需要记录下来,然后展示或者存储,但是那么多种类的数据,我们又该如何去存储、如何展示呢?
二、解决方案
(1)设计数据库
通过操作类型就可以将不同的业务分割开来。
(2)实体类
package com.hc360.crm.entity.po;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 操作记录日志表
* </p>
*
* @author hc360
* @since 2021-09-28
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class CrmOperationLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 资源id
*/
private String resourceCode;
/**
* 分身id
*/
private String clonedCode;
/**
* 操作记录内容
*/
private String message;
/**
* 操作类型 0-写跟进 1-资源入库 2-资源流转 3-分配资源 4-领取资源 5-释放资源 6-认领资源 7-编辑 8-打电话 还有其它待定
*/
private Integer operType;
/**
* 操作类型 value值 0-写跟进 1-资源入库 2-资源流转 3-分配资源 4-领取资源 5-释放资源 6-认领资源 7-编辑 8-打电话 还有其它待定
*/
@TableField(exist = false)
private String operTypeStr;
/**
* 操作类型为写跟进时有可能有图片 逗号分隔
*/
private String imgUrls;
/**
* 操作人ssoid(创建人)
*/
private Integer createSsoid;
/**
* 操作人username(创建人)
*/
private String createUsername;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
}
(3)枚举
package com.hc360.crm.common.enums;
import lombok.Getter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* 操作日志记录枚举
*/
@Getter
public enum OperationEnum {
WIRTE_FOLLOW(0, "写跟进", ""),
//「AAAAA有限公司」资源由「慧优采活动页面」入库
RESOURCE_STORAGE(1, "资源入库", "「%s」资源由「%s」入库"),
//「AAAAA有限公司」资源由系统自动分配给电销体系
RESOURCE_TRANSFER(2, "资源流转", "「%s」资源由「%s」自动分配给「%s」"),
//「山涛」由「客户资源池」-「客户池」中将该客户分配给「桓温」
ALLOT_RESOURCE(3, "分配资源", "「%s」由「%s」-「%s」中将该客户分配给「%s」"),
//「桓温」接收「山涛」由「客户资源池」-「客户池」中分配的客户
RECEIVE_RESOURCE(4, "领取资源", "「%s」接收「%s」由「%s」-「%s」中分配的客户"),
// 从「客户资源池」-「我的客户」中释放该客户
RELEASE_RESOURCE(5, "释放资源", "从「%s」-「%s」中释放该客户"),
// 从「客户资源池」-「客户池」中领取该客户
CLAIM_RESOURCE(6, "认领资源", "从「%s」-「%s」中领取该客户"),
// 行业:从「互联网」变更为「农林牧副渔」
// 联系人:从「空」变更为「嵇康」
EDIT_RESOURCE(7, "编辑", "%s: 从[%s]变更为[%s]"),
// 坐席8001主动拨打18600000000
CALL_UP(8, "打电话", "坐席%s主动拨打%s"),
// 写计划
WIRTE_PLAN(9, "写计划", ""),
// 删除计划
DELETE_PLAN(10, "删除计划", ""),
// 完成计划
FINISHED_PLAN(11, "完成计划", ""),
// 编辑计划
EDIT_PLAN(12,"编辑计划","计划内容从「%s」变更为 「%s」");
private final int code;
private final String value;
private final String msg;
OperationEnum(int code, String value, String msg) {
this.code = code;
this.value = value;
this.msg = msg;
}
private static final Map<Integer, OperationEnum> CACHE = new HashMap<>();
static {
Arrays.stream(OperationEnum.values()).forEach(item -> CACHE.put(item.getCode(), item));
}
public static OperationEnum getEnum(int code) {
return CACHE.getOrDefault(code, null);
}
}
(4) 插入到库中
//插入日志
CrmOperationLog crmOperationEdit = CrmOperationLog.builder()
.resourceCode(resourceCode)
.clonedCode(emtCode)
.operType(OperationEnum.EDIT_PLAN.getCode())
.message(String.format(OperationEnum.EDIT_PLAN.getMsg(), planContextBefore, planContextAfter))
.imgUrls("")
.createSsoid(ssoId)
.createUsername(name)
.createTime(LocalDateTime.now())
.build();
//插入到表中
asyncService.saveOperationLog(crmOperationEdit);
这里面注意有一个String.format 可以做变量的替换,
String.format了解
(5)查询
@Override
public List<CrmOperationLog> getClonedResourceOperationLog(String clonedCode, Integer operType) {
// 获取分身的操作日志,先不做分页处理
List<CrmOperationLog> list = crmOperationLogMapper.getClonedResourceOperationLog(clonedCode, operType);
if (list.size()>0){
// 还原operType字典值
for (CrmOperationLog operationLog : list) {
operationLog.setOperTypeStr(OperationEnum.getEnum(operationLog.getOperType()).getValue());
}
}
return list;
}
查询的话,可以直接用枚举进行转换
三、总结
其实爬虫等一些也可以这样,在数据库中设置通用字段,然后通过枚举进行区分。
以上是关于Java 系统中日志如何进行设置呢?的主要内容,如果未能解决你的问题,请参考以下文章