
# 统一日志框架API开发指南
> 日志单据是平台提供的用于开发业务日志的一种单据类型,业务日志可以保存在传统数据库(以下简称DB)或者Elasticsearch(二者只能选其一)。
LogORM是日志单据查询与写入的接口,使用该接口,开发者无需关心日志单据底层存储实现,根据客户环境部署需求,在MC进行简单配置,就可以将日志写入DB(MySQL/PostgreSQL/Oracle等)或者Elasticsearch(以下简称Elastic)。
### 开始使用
写入日志:
```java
// 根据实体名构建元数据并创建DynamicObject
MainEntityType entityType = EntityMetadataCache.getDataEntityType("entityName");
DynamicObject dynamicObject = new DynamicObject(entityType);
dynamicObject.getDataEntityType().getPrimaryKey().setValueFast(dynamicObject, ID.genLongId());
dynamicObject.set("xx1","hello world");
// 批量插入,需要保证objects中为同一个单据类型的DynamicObject
List<DynamicObject> objects = new ArrayList<>();
objects.add(dynamicObject);
// 初始化LogORM实例
LogORM logORM = LogORM.create();
// 批量插入
logORM.insert(objects);
```
查询日志:
```java
LogORM logORM = LogORM.create();
QFilter qFilter = QFilter.of("xx1 = ?", "hello world");
DataSet ds = logORM.queryDataSet("entityName", "id,xx1", new QFilter[]{qFilter}, 100, 0);
while (ds.hasNext()) {
Row row = ds.next();
System.out.println("LogORM-QueryDataSet:" + row.get(0));
}
```
### 接口列表
1. 插入接口
```java
/**
* 批量插入
*
* @param objects DynamicObject
* @return 插入数据的主键数组
*/
long[] insert(List<DynamicObject> objects);
```
2. 查询接口
```java
/**
* 查询DynamicObjectCollection
*
* @param entityName 单据标识
* @param selectFields 查询字段
* @param filters 过滤条件
* @param limit limit
* @param offset offset
* @return DynamicObjectCollection
*/
DynamicObjectCollection query(String entityName, String selectFields, QFilter[] filters, int limit, int offset);
/**
* 查询DataSet
*
* @param entityName 单据标识
* @param selectFields 查询字段
* @param filters 过滤条件
* @param limit limit
* @param offset offset
* @return DataSet
*/
DataSet queryDataSet(String entityName, String selectFields, QFilter[] filters, int limit, int offset);
/**
* 执行count函数
*
* @param entityName 单据标识
* @param filters 过滤条件
* @return 条数
*/
int count(String entityName, QFilter[] filters);
```
3. 更新及删除
```java
/**
* 批量更新
*
* Elastic存储日志时,会以opdate属性为分片键对日志进行分片存储,所以调用更新接口时请务必传入原有DynamicObject的opdate属性值
*
* @param objects DynamicObject