大道至简,新一代企业应用无栈开发

平台之上,一种语言,可视化、脚本化、全端一体化开发

操作日志

记录日志,形成操作历史,可用于审计

docutils document without title

系统记录日志,可用于:

  • 生成个人动态
  • 项目动态
  • 安全审计
  • 统计分析
  • 也可以用于调试代码的日志记录

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'
}]