操作日志
记录日志,形成操作历史,可用于审计
系统记录日志,可用于:
- 生成个人动态
- 项目动态
- 安全审计
- 统计分析
- 也可以用于调试代码的日志记录
1 记录日志
任何对象都可以记录日志。
添加日志:
obj.logs.add(opreation, text='', data={}, async=True)
其中:
opreation:操作类型,使用扩展应用的翻译字符串ID形式: {账户名}.{应用名}:log_{操作名} ,比如 zopen.logs:log_edit
text:可选,操作描述, 如果不填,将自动记录obj在站点的完整路径
data:可选,附加的结构化json信息,比如表单的修改信息,data信息使用和operation同名的脚本来渲染。
比如脚本 zopen.logs:log_edit脚本来渲染zopen.logs:log_edit操作:
root.call_script('zopen.logs:log_edit', request, data)
aysnc:可选,默认异步记录日志,如果事务回滚,日志不会记录。
如果将这里设置为False,调试程序发生错误也会记录日志。
2 内置的操作类型
内置的一些操作项 opreation:
站点相关:
- zopen.site_config:log_login : 登录
- zopen.site_config:log_logout : 登出 操作
内容相关公共(zopen.logs):
- zopen.logs:log_create : 创建
- zopen.logs:log_edit: 编辑 data: {'modify':{'title':('old title', 'new title')}}
- zopen.logs:log_modifyMetadata: 编辑扩展属性, data同log_edit
- zopen.logs:log_copy :复制
- zopen.logs:log_move : 移动
- zopen.logs:log_import : 导入
- zopen.logs:log_export : 导出
- zopen.logs:log_move2recycle :删除
- zopen.logs:log_revert : 还原
- zopen.logs:log_subscription : 订阅操作
- zopen.logs:log_unsubscription : 取消订阅
- zopen.logs:log_assign : 分配权限操作
- zopen.logs:log_change_state: 改变状态 {'to':'modify.published'}
- zopen.logs:log_authorize:授权操作, 授权信息的json diff
- zopen.logs:log_comment : 评论操作,这种应该不需要记录日志
- zopen.logs:log_remove_comment : 删除评论操作
文件相关的:
- zopen.docs:log_download : 下载
- zopen.docs:log_downloadPDF : 下载PDF
- zopen.docs:log_upload 上传
- zopen.docs:log_newrevision : 上传新版本
- zopen.docs:log_forkrevision : 建立分支版本
- zopen.docs:log_merge : 合并分支
- zopen.docs:log_removerevision : 删除历史版本
- zopen.docs:log_fixversion : 定版
- zopen.docs:log_new_attachment : 添加附件
- zopen.docs:log_remove_attachment : 删除附件
- zopen.docs:log_revert_attachment : 恢复附件
- zopen.docs:log_created 创建文件夹
- zopen.docs:log_newFlow : 创建表单库
- zopen.docs:log_save :在线编辑保存
- zopen.docs:log_editoutside :外部编辑
- zopen.docs:log_newrevision : 新版本
- zopen.docs:log_rename: 2种重命名操作
- zopen.docs:log_print : 打印操作
- zopen.docs:log_share : 分享
- zopen.docs:log_preview : 预览
- zopen.docs:log_create_shortcut : 创建快捷方式
- zopen.logs:log_addMetadata : 添加扩展属性
- zopen.logs:log_modifyMetadata : 修改扩展属性
- zopen.logs:log_removeMetadata : 删除扩展属性
- zopen.sendfile:log_sendout : 外发操作
3 展示操作日志
可点击一个链接显示操作日志:
ui.link('操作日志').on('click', context, requset, 'zopen.logs:history', domains=['zopen.docs', 'zopen.views', 'zopen.datamanager'])
其中 domains 表示允许按哪些扩展应用中定义的 日志翻译项 来过滤日志。
4 搜索日志 LogQuerySet
如果要搜索日志,则应该用 LogQuerySet ,接口类似QuerySet:
results = LogQuerySet().anyof(bound_object_parents=[uid])\ .anyof(bound_object_types=['File'])
或者希望只搜索有权限的日志(默认搜索所有日志):
LogQuerySet(restricted=True)
日志支持如下索引条件:
- bound_object_id:关联内容的uid
- bound_object_types:关联内容的类型
- bound_object_parents:关联内容的上级uids
- bound_object_title : 标题,可全文搜索
- details:详细说明,可搜索
- principal_id:操作人的id
- displayname:操作人的名字,可搜索
- operation:操作代号
- timestamp:发生时间戳
返回结果:
[{ '_source': { 'instance_id': 'workonline.default.zopen', 'client_ip': '192.168.1.86', 'disallowed_principals': [], 'displayname': 'admin', 'timestamp': 1544768718.98802, 'app': 'workonline', 'zpath': '/wo/default.zopen.standalone/_more_/groupchats/120219', 'allowed_principals': ['users.admin', 'users.test'], 'principal_id': 'users.admin', 'details': 'test', 'bound_object_types': ['DataItem', 'Item'], 'bound_object_parents': [270585620, 1754007458, 270585621], 'bound_object_id': 270585621, 'operation': 'edit', 'data': {}, 'bound_object_location': 'test', 'bound_object_title': 'test' }, '_id': 'AWerZAmUnKFhHeiULKrk' }]