精华内容
下载资源
问答
  • 系统日志表设计
    万次阅读
    更多相关内容
  • 背景对于很多后台管理系统来说,权限较多,对系统操作的人也会多。如此以来,对于一些操作的记录就非常有必要了,从而可以清楚的追踪对系统进行操作的人以及做了哪些操作,并且可以...下面简单说一下自己设计的思路。

    背景

    对于很多后台管理系统来说,权限较多,对系统操作的人也会多。如此以来,对于一些操作的记录就非常有必要了,从而可以清楚的追踪对系统进行操作的人以及做了哪些操作,并且可以快速排查定位一些问题。下面简单说一下自己设计的思路。

    整体思路

    基于spring 拦截器和java的注解,并且通过多线程形式异步向数据库中插入操作日志来实现操作日志功能模块。

    1.数据库设计

    主日志mainlog表
    记录主日志相关信息
    子日志表childlog
    记录子操作日志信息

    2.java自定义注解

    @Target({ ElementType.PARAMETER, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MainAnnotation {
        int maintype() default 0;
        String type() default "0";
        String tables() default "";
        String desc() default "";
    }

    3.spring拦截器

    public class MainInterceptor extends HandlerInterceptorAdapter{
    
        private static final ThreadLocal<Long> mailogthreadLocal = new ThreadLocal<Long>();
        //前置拦截
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            if (!(handler instanceof HandlerMethod)) {
                return super.preHandle(request, response, handler);
            }
            mailogthreadLocal.set(System.currentTimeMillis());
            return super.preHandle(request, response, handler);
        }
    
        //后置拦截
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            if (!(handler instanceof HandlerMethod)) {
                 super.preHandle(request, response, handler);
                 return;
            }
            HandlerMethod method = (HandlerMethod)handler;
            MainAnnotation mainlog = method.getMethodAnnotation(MainAnnotation.class);
            if(mainlog != null) {
                String desc = mainlog.desc();
                int maintype = mainlog.maintype();
                String type = mainlog.type();
                String tables = mainlog.tables();
                String username = (String) request.getSession().getAttribute("username");
                long costtime = (int) (System.currentTimeMillis()-get());
                LogUtil.writeMainLog(new MainLogEntity(maintype, username, tables, desc, costtime),list);//异步插入数据库日志记录
    
            }
        }
    

    4.异步插入数据库日志记录

    public class LogUtil {
        private final static Logger logger = LoggerFactory.getLogger(LogUtil.class);
        private static ExecutorService executorService = Executors.newFixedThreadPool(2);
    
        private static MainServiceImpl mainService = SpringContextHolder.getBean("mainServiceImpl");
    
        public static void writeMainLog(MainEntity log, List<ChildEntity> list) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        if (mainService != null) {
                            logger.info("---插入日志start---");
                            int issuccess = mainService.insertlog(log);
                            int mainid = log.getId();
                            if (list != null && issuccess > 0 && mainid > 0) {
                                for (ChildLogEntity clog : list) {
                                    clog.setMainlogid(mainid);
                                }
                                mainService.insertchildlog(list);
                            }
                            logger.info("---插入日志end---");
                        } else {
                            logger.error("spring init bean mainService fail,please check configs");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
    
        }
    
    }
    

    5.使用实例

    这里写图片描述

    展开全文
  • 真正通用的操作日志系统设计,这个是以前看到的资料,觉得不错。此文档版权属于作者本人“加伊”。
  • 操作日志表设计

    万次阅读 2019-07-25 17:36:16
    管理系统的操作日志如何做成通用的模块一直是个让我头疼的问题,不过看了博客园里的某篇文章后,现在基本解决了。    在开始做之前,必须把两个日志分清楚,那就是普通操作日志和业务操作日志,这两者有何区别? ...

    管理系统的操作日志如何做成通用的模块一直是个让我头疼的问题,不过看了博客园里的某篇文章后,现在基本解决了。
     
      在开始做之前,必须把两个日志分清楚,那就是普通操作日志和业务操作日志,这两者有何区别?
      在我理解,普通操作日志就是单表的操作记录,而业务操作日志则就是一系列的普通操作日志的集合。
      打个比方,用户需要购买一样宝贝,已经到了下单那步,下单就是个业务,这个业务背后就是一系列的业务,如:
      生成订单 → 生成商品快照 → 发送一条站内信 → 删除购物车里对应宝贝
      这样一个下单操作就包含了4部分,可以把这4部分看成是4张表,分别对这4张表进行对应的操作,就实现了业务。
      但今天我要讲的不是业务操作日志,因为不同项目的业务不尽相同,所以它无法做成通用模块,而我要讲的,就是普通操作日志。
      上面解释了一大段,下面干货就要亮相了,先洗把脸清醒下。
      ……
      首先,哪些地方需要记录操作日志?执行insert、update、delete这3个操作的时候,就需要进行日志,而日志执行的先后顺序如下
    insert 在insert后执行
    update 在update前后都要执行,操作前获取操作前数据,操作后获取操作后数据
    delete 在delete前执行
      顺序清楚后,就来看下我写的一份日志操作类吧,第一版随便写写的,重复代码有点多,还未来得及优化。

    • View Code
        使用前,需要引入数据库操作类,这是我之前写的一份,可参考《全新的PDO数据库操作类(仅适用Mysql)》。
        引入之后,就可以开始使用了。
        select
    $log->insert(82, 'tb_member');
    

    update

    $log->updateStart(82, 'tb_member');
    

    //中间放更新操作代码

    $log->updateEnd();
      delete
    $log->delete(82, 'tb_member');
    

    可以看到,一共只需要两个参数即可,分别是表ID(主键)和表名称。
      另外需要强调一点,表注释和字段注释一定要完整,因为记录的信息包含注释,目的就是为了查阅的时候能清楚哪个字段是干什么用的。
      下面就看下成品吧
    在这里插入图片描述
    在这里插入图片描述

    最后把表结构分享下,一共2张表,一张主表一张从表,主表记录操作表及操作人等信息,从表记录操作的表字段信息。

    CREATE TABLE `tb_log` (
      `tbid` bigint(20) NOT NULL AUTO_INCREMENT,
      `adminid` bigint(20) DEFAULT NULL COMMENT '管理员id',
      `type` tinyint(4) DEFAULT '1' COMMENT '操作类型:1新增2修改3删除',
      `tableid` bigint(20) DEFAULT NULL,
      `tablename` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '表名',
      `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
      `dt` datetime DEFAULT NULL,
      PRIMARY KEY (`tbid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    CREATE TABLE `tb_log_content` (
      `tbid` bigint(20) NOT NULL AUTO_INCREMENT,
      `logid` bigint(20) DEFAULT NULL,
      `tbkey` longtext COLLATE utf8_unicode_ci,
      `tbvalue` longtext COLLATE utf8_unicode_ci,
      `currenttbvalue` longtext COLLATE utf8_unicode_ci,
      `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
      PRIMARY KEY (`tbid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    

    转自:https://www.cnblogs.com/hooray/archive/2012/09/05/2672133.html

    展开全文
  • 系统操作日志设计

    万次阅读 2015-12-06 15:02:57
    我们在做企业管理系统时,有多多少少都有对数据的完整性有所要求,比如要求系统不能物理删除记录,要求添加每一条数据时都要有系统记录、或者更新某条数据都需要跟踪到变化的内容、或者删除数据时需要记录谁删除了,...

    为什么要做操作日志?

    其实上文也描述了一些,其主要目的就是跟踪到每一个用户在系统的操作行为,如对数据进行查询、新增、编辑或删除甚至是登录等行为。更进一步的理解可以说是对用户使用系统情况的跟踪,对数据的跟踪防止数据意外删除、更改时有所记录,有所依据,以便对数据的还原,从某种程序上可以保护数据的完整性。

     

    系统设计

    场景

    我们现在有一张表叫Employee:

    ID int
    Name nvarchar(50)
    Gender nvarchar(2)
    DateCreated datetime
    CreateUser nvarchar(50)

    在aspx页面中可能会有EmployeeEdit.aspx(用来添加或更新Employee信息等操作),EmployeeList.aspx(用来查询或进行删除Employee信息等操作)

    好了,现在我们要对Empoyee表操作的信息做一个系统日志,那怎么办?

    也许你可以建立多一个表跟Employee表一模一样的,叫做EmployeeLog

    ID int
    Name nvarchar(50)
    Gender nvarchar(2)
    DateCreated datetime
    CreateUser nvarchar(50)
    LogCreated datetime
    OperationType int

    其中加多了一些附属的信息如LogCreated(日志添加日期)和OperationType(查询、新增、删除、更新)

    此时这种情况可能大家在做用户登录日志的时候是一件很常见的事件。

    但……问题来了,假如我需要对表EmployeeIncome(员工的收入情况)做日志那怎么办?

    好建立多一张表叫EmployeeIncomeLog来记录员工收入情况的操作日志。

    假如又需要对表FixedAsset(固定资产)进行日志记录那又怎么办?

     

    好了,大家可能意识到我们这样做不但会造成表数量的增倍,而且大大的增加了工作量和开发时间,对数据库表不易管理等情况。

     

    因此我们需要一个能够通过简单的配置和编写就可以完成以上功能的日志管理

    数据库设计

    系统日志设计

    包括三个表,

    LogSetting(日志设置)——用来存储配置业务表名、业务名称、主键等

    LogSettingDetail(日志设置明细)——用来存储配置业务表需要记录的详细内容,如Employee表中,我们可能需要记录字段Name、Gender等信息。

    LogOperation(操作日志)——用来记录用户对各种业务操作的内容情况。

     

    下篇将讨论用代码如何实现日志管理的功能,下面先来几张图:

    日志列表:

    日志管理列表

    查看日志内容:

    查看日志内容



    管理系统的操作日志:

    管理系统的操作日志如何做成通用的模块一直是个让我头疼的问题,不过看了博客园里的某篇文章后,现在基本解决了。

      相关文章链接:《系统操作日志设计

      在开始做之前,必须把两个日志分清楚,那就是普通操作日志业务操作日志,这两者有何区别?

      在我理解,普通操作日志就是单表的操作记录,而业务操作日志则就是一系列的普通操作日志的集合。

      打个比方,用户需要购买一样宝贝,已经到了下单那步,下单就是个业务,这个业务背后就是一系列的业务,如:

      生成订单 → 生成商品快照 → 发送一条站内信 → 删除购物车里对应宝贝

      这样一个下单操作就包含了4部分,可以把这4部分看成是4张表,分别对这4张表进行对应的操作,就实现了业务。

      但今天我要讲的不是业务操作日志,因为不同项目的业务不尽相同,所以它无法做成通用模块,而我要讲的,就是普通操作日志。

      上面解释了一大段,下面干货就要亮相了,先洗把脸清醒下。

      ……

      首先,哪些地方需要记录操作日志?执行insert、update、delete这3个操作的时候,就需要进行日志,而日志执行的先后顺序如下

    insert在insert后执行
    update在update前后都要执行,操作前获取操作前数据,操作后获取操作后数据
    delete在delete前执行

      顺序清楚后,就来看下我写的一份日志操作类吧,第一版随便写写的,重复代码有点多,还未来得及优化。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    class  LOG{
         protected  $primaryid ;
         protected  $tbid ;
         protected  $tbname ;
         protected  $keys ;
         protected  $values ;
         /**
          * 参数说明
          * int              $tbid       查询指定表的id
          * string           $tbname     数据库表名
          */
         public  function  insert( $tbid $tbname ){
             global  $db ;
             //查询表注释
             $db ->query( 'show table status where name = "' . $tbname . '"' );
             $tb  $db ->fetch();
             //插入日志主表
             $returnid  $db ->insert(0, 2,  'tb_log' array (
                 'adminid = ' . $_SESSION [ 'admin' ][ 'id' ],
                 'type = 1' ,
                 'tableid = ' . $tbid ,
                 'tablename = "' . $tbname . '"' ,
                 'comment = "' . $tb [ 'Comment' ]. '"' ,
                 'dt = now()'
             ));
             //查询字段注释
             $db ->query( 'show full columns from ' . $tbname );
             $tb  $db ->fetchAll();
             foreach ( $tb  as  $v ){
                 $commentArray [ $v [ 'Field' ]] =  $v [ 'Comment' ];
             }
             //查询所有字段信息,插入日志从表
             $rs  $db ->select(0, 1,  $tbname '*' 'and tbid = ' . $tbid );
             $keys  array_keys ( $rs );
             $values  array_values ( $rs );
             for ( $i  = 0;  $i  count ( $keys );  $i ++){
                 $db ->insert(0, 0,  'tb_log_content' array (
                     'logid = ' . $returnid ,
                     'tbkey = "' . $keys [ $i ]. '"' ,
                     'tbvalue = "' . $values [ $i ]. '"' ,
                     'comment = "' . $commentArray [ $keys [ $i ]]. '"'
                 ));
             }
         }
         public  function  updateStart( $tbid $tbname ){
             global  $db ;
             //查询表注释
             $db ->query( 'show table status where name = "' . $tbname . '"' );
             $tb  $db ->fetch();
             //插入日志主表
             $returnid  $db ->insert(0, 2,  'tb_log' array (
                 'adminid = ' . $_SESSION [ 'admin' ][ 'id' ],
                 'type = 2' ,
                 'tableid = ' . $tbid ,
                 'tablename = "' . $tbname . '"' ,
                 'comment = "' . $tb [ 'Comment' ]. '"' ,
                 'dt = now()'
             ));
             //查询修改前数据信息
             $rs  $db ->select(0, 1,  $tbname '*' 'and tbid = ' . $tbid );
             $keys  array_keys ( $rs );
             $values  array_values ( $rs );
             $this ->primaryid =  $returnid ;
             $this ->tbid =  $tbid ;
             $this ->tbname =  $tbname ;
             $this ->keys =  $keys ;
             $this ->values =  $values ;
         }
         public  function  updateEnd(){
             global  $db ;
             //查询字段注释
             $db ->query( 'show full columns from ' . $this ->tbname);
             $tb  $db ->fetchAll();
             foreach ( $tb  as  $v ){
                 $commentArray [ $v [ 'Field' ]] =  $v [ 'Comment' ];
             }
             //查询修改后数据信息
             $rs  $db ->select(0, 1,  $this ->tbname,  '*' 'and tbid = ' . $this ->tbid);
             $currentvalues  array_values ( $rs );
             //前后信息进行比较
             for ( $i  = 0;  $i  count ( $currentvalues );  $i ++){
                 if ( $this ->values[ $i ] !==  $currentvalues [ $i ]){
                     $db ->insert(0, 0,  'tb_log_content' array (
                         'logid = ' . $this ->primaryid,
                         'tbkey = "' . $this ->keys[ $i ]. '"' ,
                         'tbvalue = "' . $this ->values[ $i ]. '"' ,
                         'currenttbvalue = "' . $currentvalues [ $i ]. '"' ,
                         'comment = "' . $commentArray [ $this ->keys[ $i ]]. '"'
                     ));
                 }
             }
         }
         public  function  delete ( $tbid $tbname ){
             global  $db ;
             //查询表注释
             $db ->query( 'show table status where name = "' . $tbname . '"' );
             $tb  $db ->fetch();
             //插入日志主表
             $returnid  $db ->insert(0, 2,  'tb_log' array (
                 'adminid = ' . $_SESSION [ 'admin' ][ 'id' ],
                 'type = 3' ,
                 'tableid = ' . $tbid ,
                 'tablename = "' . $tbname . '"' ,
                 'comment = "' . $tb [ 'Comment' ]. '"' ,
                 'dt = now()'
             ));
             //查询字段注释
             $db ->query( 'show full columns from ' . $tbname );
             $tb  $db ->fetchAll();
             foreach ( $tb  as  $v ){
                 $commentArray [ $v [ 'Field' ]] =  $v [ 'Comment' ];
             }
             //查询所有字段信息,插入日志从表
             $rs  $db ->select(0, 1,  $tbname '*' 'and tbid = ' . $tbid );
             $keys  array_keys ( $rs );
             $values  array_values ( $rs );
             for ( $i  = 0;  $i  count ( $keys );  $i ++){
                 $db ->insert(0, 0,  'tb_log_content' array (
                     'logid = ' . $returnid ,
                     'tbkey = "' . $keys [ $i ]. '"' ,
                     'tbvalue = "' . $values [ $i ]. '"' ,
                     'comment = "' . $commentArray [ $keys [ $i ]]. '"'
                 ));
             }
         }
    }

      使用前,需要引入数据库操作类,这是我之前写的一份,可参考《全新的PDO数据库操作类(仅适用Mysql)》。

      引入之后,就可以开始使用了。

      select

    1
    $log ->insert(82,  'tb_member' );

      update

    1
    2
    3
    $log ->updateStart(82,  'tb_member' );
    //中间放更新操作代码
    $log ->updateEnd();

      delete

    1
    $log -> delete (82,  'tb_member' );

      可以看到,一共只需要两个参数即可,分别是表ID(主键)和表名称。

      另外需要强调一点,表注释和字段注释一定要完整,因为记录的信息包含注释,目的就是为了查阅的时候能清楚哪个字段是干什么用的。

      下面就看下成品吧

      最后把表结构分享下,一共2张表,一张主表一张从表,主表记录操作表及操作人等信息,从表记录操作的表字段信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    -- ----------------------------
    -- Table structure for `tb_log`
    -- ----------------------------
    CREATE  TABLE  `tb_log` (
       `tbid`  bigint (20)  NOT  NULL  AUTO_INCREMENT,
       `adminid`  bigint (20)  DEFAULT  NULL  COMMENT  '管理员id' ,
       `type` tinyint(4)  DEFAULT  '1'  COMMENT  '操作类型:1新增2修改3删除' ,
       `tableid`  bigint (20)  DEFAULT  NULL ,
       `tablename`  varchar (255)  COLLATE  utf8_unicode_ci  DEFAULT  NULL  COMMENT  '表名' ,
       `comment`  varchar (255)  COLLATE  utf8_unicode_ci  DEFAULT  NULL ,
       `dt` datetime  DEFAULT  NULL ,
       PRIMARY  KEY  (`tbid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=27  DEFAULT  CHARSET=utf8  COLLATE =utf8_unicode_ci;
     
    -- ----------------------------
    -- Table structure for `tb_log_content`
    -- ----------------------------
    CREATE  TABLE  `tb_log_content` (
       `tbid`  bigint (20)  NOT  NULL  AUTO_INCREMENT,
       `logid`  bigint (20)  DEFAULT  NULL ,
       `tbkey` longtext  COLLATE  utf8_unicode_ci,
       `tbvalue` longtext  COLLATE  utf8_unicode_ci,
       `currenttbvalue` longtext  COLLATE  utf8_unicode_ci,
       `comment`  varchar (255)  COLLATE  utf8_unicode_ci  DEFAULT  NULL ,
       PRIMARY  KEY  (`tbid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=109  DEFAULT  CHARSET=utf8  COLLATE =utf8_unicode_ci;


    展开全文
  • 日志系统设计pdm

    2014-12-26 15:55:11
    日志系统的pdm,包括日志记录以及日志详情!两张
  • C++设计实现日志系统

    千次阅读 多人点赞 2019-11-16 20:32:18
    日志系统几乎是每一个实际的软件项目从开发、测试到交付,再到后期的维护...本文Jungle将用C++设计实现一个日志系统。 1.为什么需要日志 为什么需要日志?其实在引言中已经提到了,实际的软件项目的几乎每个过...
  • 用户登录 日志表 设计

    万次阅读 2016-10-25 16:31:56
    表设计: 脚本: USE [master] GO CREATE TABLE [dbo].[LogLoginOn]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [InputLoginName] [varchar](50) NULL, [ClientIP] [varchar](15) NULL, [MemberId] [bigint]
  • 系统日志表一张

    千次阅读 2013-06-09 14:36:33
    最近考虑给我的web系统记录日志的方式。于是就搞了一张这样的出来。先来张图。  日志表就是上面这个样子,下面的语句: drop table log; /*==========================================================...
  • 数据库日志采集系统方案设计

    千次阅读 2022-01-07 13:33:19
    2021年我们研发了数据库日志采集分析平台系统,实现了数据库主机系统日志,数据库错误日志,审计日志的采集和分析。 01 背景介绍 之家数据库日志以前分散在各DB宿主机及容器RDS上,没有实现集中采集,排查定位故障...
  • 系统日志方案设计

    千次阅读 2018-10-02 17:11:32
    前后端交互系统 前端感知异常与不感知异常的区分有多重方法:不同的异常类或者相同的类,不同的错误码区间等等; 有多种交互形式的开放系统
  • 业务应用系统的业务操作日志设计

    千次阅读 2020-02-22 16:03:34
    日志信息应包含如下内容: 1.操作时间 2.系统设备的主机名与IP地址(即被访问的服务器) 3.操作源IP(即访问者IP) 4.访问的业务名称 5.操作方式(增删改查) 6.操作结果(成功,失败) ...
  • 管理系统的操作日志如何做成通用的模块一直是个让我头疼的问题,不过看了博客园里的某篇文章后,现在基本解决了。... 相关文章链接:《系统操作日志设计》  在开始做之前,必须把两个日志分清楚,那就是普
  • 关于日志记录系统设计思想; 关于日志记录系统设计思想 关于日志记录系统设计思想 关于日志记录系统设计思想 关于日志记录系统设计思想
  • 权限系统表结构设计

    万次阅读 2018-03-09 19:52:37
    一:树形结构设计1.树形结构三要素:parentId:父节点id;level:设计模式父节点的id+level。顶级节点的level默认值0;seq:同一层级排序。2.遍历:主要思路:同一层级的节点保存在key为level的map结构中。这样就可以...
  • 通常的产品或项目部署至服务器,服务一般会打印日志便于线上问题跟踪。 使用 Log4j 中的自定义 Appender,将服务运行打印的日志直接推送到 Kafka 中。经由 Logstash 消费 Kafka 生产的数据,进行加工过滤后输出到 ...
  • 日志管理和分析系统设计与实现

    热门讨论 2009-03-31 15:46:17
    分析了日志格式一Windows操作系统事件日志、UNIX系统日志和通用防火墙日志。系统 通过采集、筛选分析法、特征匹配分析法、统计网络设备日志数据,并提供Web应用向 用户提供关于网络设备的运行状态和安全事件的统计...
  • 系统设计——操作日志

    万次阅读 2017-07-10 16:41:44
    设计主要为实现用户操作一些重要功能过程中,系统会自动记载对应操作日志,以及操作过程中涉及的库、、字段及数据变动,以便后期追责、及功能回退等需要。 名词解释: 业务编码: 指系统区分业务操作的系统标识...
  • 操作日志产品设计

    千次阅读 2020-07-29 11:20:06
    操作日志是一个经常被忽视,但在关键时刻不被甩锅的好功能,那操作日志该怎么设计呢? 对开发而言,执行insert、update、delete这3个操作的时候,就需要进行日志,而日志执行的先后顺序如下: 对产品经理而...
  • https://mp.weixin.qq.com/s/XiCky-Z8-n4vqItJVHjDIg
  • 日志系统之HBase日志存储设计优化

    万次阅读 2015-06-13 15:08:27
    本文探讨了基于HBase的日志存储原先自建索引存在的问题,展开分析了rowKey优化、索引优化等相关的优化策略。
  • 中小型WEB系统权限日志数据表设计

    千次阅读 2014-11-20 20:36:49
    中小型WEB系统权限日志数据表设计
  • Windows系统服务器系统日志在哪里查看? 服务器日志是什么? 服务器日志(server log)是一个或多个由服务器自动创建和维护的日志文件,其中包含其所执行活动的列表 简单来说,服务器的日记就是记录网站被访问的...
  • 基于Web日志挖掘的网页推荐系统设计
  • java 项目日志管理设计方案

    万次阅读 多人点赞 2017-05-27 16:00:00
    因项目需要记录整个系统的操作记录,考虑到系统操作日志的数据量,单很容易达到瓶颈,导致查询效率低下,顾使用分表方案,减小数据库的负担,缩短查询时间。目前对于分表的解决方案有很多,但本篇博文主要讲解博...
  • FLASH日志文件系统设计

    千次阅读 2013-08-26 12:59:05
    大家都知道,目前主要流利的日志文件系统有JFFS,YAFFS等,这些都是目前在Linux中应用较多的日志文件系统。前期在做嵌入式方面的开发工作时,发现原来同事使用FLASH存储数据时使用了非常多的全局变量来保存FLASH的...
  • 日志系统(es)

    千次阅读 2022-04-27 13:57:27
    Outputs =================================== # 关闭系统模版 setup.template.enabled: false # 设定自己的模版名 setup.template.name: "server1" # 模版 setup.template.pattern: "server1-*" # 索引的生命周期,...
  • 日志结构文件系统设计与实现

    千次阅读 2017-12-06 22:34:34
    from The Design and Implementation of a Log-Structured File System——–Mendel Rosenblum...日志式文件系统将所有的更改以日志式的结构连续的写入磁盘,以这种方式来同时加速了文件写入和崩溃恢复。日志是磁盘的上

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 468,166
精华内容 187,266
关键字:

系统日志表设计