Oracle 日志记录工具类

在我们编写存储过程,或者PKG时,总有一些异常情况考虑不到;为了快速排查定位问题,需要及时记录异常日志;

1.建表语句 : 异常日志表;正常日志表

create table SSS.TC_EXCEPTION_LOG
(
  log_id         NUMBER(20) not null,
  package_name   VARCHAR2(120),
  proc_name      VARCHAR2(120),
  exception_tm   DATE default sysdate,
  exception_code VARCHAR2(200),
  exception_desc VARCHAR2(1000),
  exception_remk VARCHAR2(600),
  line_no        NUMBER(10)
);
comment on table SSS.TC_EXCEPTION_LOG
  is ‘系统异常日志数据‘;
comment on column SSS.TC_EXCEPTION_LOG.log_id
  is ‘主键‘;
comment on column SSS.TC_EXCEPTION_LOG.package_name
  is ‘包名‘;
comment on column SSS.TC_EXCEPTION_LOG.proc_name
  is ‘过程名‘;
comment on column SSS.TC_EXCEPTION_LOG.exception_tm
  is ‘异常时间‘;
comment on column SSS.TC_EXCEPTION_LOG.exception_code
  is ‘异常编码‘;
comment on column SSS.TC_EXCEPTION_LOG.exception_desc
  is ‘异常描述‘;
comment on column SSS.TC_EXCEPTION_LOG.exception_remk
  is ‘异常说明‘;
comment on column SSS.TC_EXCEPTION_LOG.line_no
  is ‘异常行号‘;
create index SSS.IDX_TC_EXCEPTION_LOG1 on SSS.TC_EXCEPTION_LOG (PROC_NAME);
alter table SSS.TC_EXCEPTION_LOG add constraint IPK_TC_EXCEPTION_LOG primary key (LOG_ID);

create table SSS.TC_EXECUTE_LOG
(
  log_id        NUMBER(20) not null,
  package_name  VARCHAR2(120),
  proc_name     VARCHAR2(120),
  strat_tm      DATE default sysdate not null,
  end_tm        DATE,
  spend_tm      NUMBER(10),
  ref_data_rows NUMBER(10),
  remk          VARCHAR2(1000)
);

comment on table SSS.TC_EXECUTE_LOG
  is ‘公用执行日志表‘;
comment on column SSS.TC_EXECUTE_LOG.log_id
  is ‘执行日志ID‘;
comment on column SSS.TC_EXECUTE_LOG.package_name
  is ‘包名‘;
comment on column SSS.TC_EXECUTE_LOG.proc_name
  is ‘过程名‘;
comment on column SSS.TC_EXECUTE_LOG.strat_tm
  is ‘执行开始时间‘;
comment on column SSS.TC_EXECUTE_LOG.end_tm
  is ‘执行结束时间‘;
comment on column SSS.TC_EXECUTE_LOG.spend_tm
  is ‘执行花费时间(单位: 0.01秒)‘;
comment on column SSS.TC_EXECUTE_LOG.ref_data_rows
  is ‘执行涉及数据量‘;
comment on column SSS.TC_EXECUTE_LOG.remk
  is ‘注释‘;
create index SSS.INK_TC_EXECUTE_LOG_01 on SSS.TC_EXECUTE_LOG (PACKAGE_NAME, PROC_NAME, REMK);
create index SSS.INK_TC_EXECUTE_LOG_02 on SSS.TC_EXECUTE_LOG (STRAT_TM);
alter table SSS.TC_EXECUTE_LOG add constraint IPK_TC_EXECUTE_LOG primary key (LOG_ID, STRAT_TM);

  

2. 记录异常的PKG

CREATE OR REPLACE PACKAGE BODY SSS.PKG_SYS_LOG IS

  --*************************************************************
  -- AUTHOR  : KELIVEN LIU
  -- CREATED : 2008-05-20
  -- PURPOSE : 记录系统中存储过程运行日志

  -- PARAMETER:
  -- P_PACKAGE_NAME VARCHAR2      包名
  -- P_PROC_NAME    VARCHAR2,    过程名
  -- P_EXCEP_DT     DATE,       执行日期
  -- P_EXCEP_CODE   VARCHAR2,   异常代码
  -- P_EXCEP_DESC   VARCHAR2,   异常描述信息
  -- P_EXCEP_REMK   VARCHAR2,  备注,可能的值为‘BEGIN‘,‘END‘,‘ERROR‘
  -- P_LINE_NO      NUMBER  行号

  -- MODIFY HISTORY
  -- PERSON          DATE            COMMENTS
  -- -------------------------------------------------------------
  --*************************************************************

  --*************************************************************
  -- AUTHOR  : KELIVEN LIU
  -- CREATED : 2008-05-20
  -- PURPOSE : 记录系统中存储过程运行日志

  -- PARAMETER:
  -- NAME            TYPE            DESC
  -- P_SEQ_NO       NUMBER       发生异常存储过程中主要sequence的当前值
  -- P_PROC_NAME  VARCHAR2        存储过程名
  -- P_EXCEP_DT     DATE         时间,包括开始时间,结束时间,异常发生时间
  -- P_EXCEP_CODE   VARCHAR2      异常代码
  -- P_EXCEP_DESC   VARCHAR2      异常描述信息
  -- P_EXCEP_REMK   VARCHAR2      备注,可能的值为‘BEGIN‘,‘END‘,‘ERROR‘
  -- P_LINE_NO      NUMBER        行号

  -- P_PACKAGE_NAME       VARCHAR2,    包名
  -- P_PROC_NAME          VARCHAR2,   过程名
  -- P_EXEC_START_TM      DATE,       执行开始时间
  -- P_EXEC_END_TM        DATE,       执行结束时间
  -- P_EXEC_PEND_TM       NUMBER,     执行花费时间
  -- P_EXEC_REF_DATA_ROWS NUMBER,     涉及数据量
  -- P_EXEC_REMK          VARCHAR2    备注,可能的值为‘BEGIN‘,‘END‘,‘ERROR‘

  -- MODIFY HISTORY
  -- PERSON          DATE            COMMENTS
  -- -------------------------------------------------------------
  --*************************************************************
  PROCEDURE ERROR_LOG(P_PACKAGE_NAME VARCHAR2,
                      P_PROC_NAME    VARCHAR2,
                      P_EXCEP_DT     DATE,
                      P_EXCEP_CODE   VARCHAR2,
                      P_EXCEP_DESC   VARCHAR2,
                      P_EXCEP_REMK   VARCHAR2,
                      P_LINE_NO      NUMBER) AS
    PRAGMA AUTONOMOUS_TRANSACTION;
  BEGIN
    INSERT INTO TC_EXCEPTION_LOG
      (LOG_ID,
       PACKAGE_NAME,
       PROC_NAME,
       EXCEPTION_TM,
       EXCEPTION_CODE,
       EXCEPTION_DESC,
       EXCEPTION_REMK,
       LINE_NO)
    VALUES
      (SEQ_LOG.NEXTVAL,
       SUBSTR(P_PACKAGE_NAME, 1, 120),
       SUBSTR(P_PROC_NAME, 1, 120),
       P_EXCEP_DT,
       SUBSTR(P_EXCEP_CODE, 1, 200),
       SUBSTR(P_EXCEP_DESC, 1, 1000),
       SUBSTR(P_EXCEP_REMK, 1, 600),
       P_LINE_NO);

    COMMIT;

  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(‘STP_RUNNING_LOG‘ || SQLCODE || ‘:‘ || SQLERRM);
      ROLLBACK;
  END ERROR_LOG;

  ---系统执行日志
  PROCEDURE EXECUTE_LOG(P_PACKAGE_NAME       VARCHAR2,
                        P_PROC_NAME          VARCHAR2,
                        P_EXEC_START_TM      DATE,
                        P_EXEC_END_TM        DATE,
                        P_EXEC_PEND_TM       NUMBER,
                        P_EXEC_REF_DATA_ROWS NUMBER,
                        P_EXEC_REMK          VARCHAR2) AS
    PRAGMA AUTONOMOUS_TRANSACTION;
  BEGIN

    INSERT INTO TC_EXECUTE_LOG
      (LOG_ID,
       PACKAGE_NAME,
       PROC_NAME,
       STRAT_TM,
       END_TM,
       SPEND_TM,
       REF_DATA_ROWS,
       REMK)
    VALUES
      (SEQ_LOG.NEXTVAL,
       SUBSTR(P_PACKAGE_NAME, 1, 120),
       SUBSTR(P_PROC_NAME, 1, 120),
       P_EXEC_START_TM,
       P_EXEC_END_TM,
       P_EXEC_PEND_TM,
       P_EXEC_REF_DATA_ROWS,
       SUBSTR(P_EXEC_REMK, 1, 1000));
    COMMIT;

  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(‘TC_EXECUTE_LOG‘ || SQLCODE || ‘:‘ || SQLERRM);
      ROLLBACK;
  END EXECUTE_LOG;

END PKG_SYS_LOG;
/

  

原文地址:https://www.cnblogs.com/fubinhnust/p/9928207.html

时间: 2024-11-16 15:58:22

Oracle 日志记录工具类的相关文章

封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil

封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil,代码比较简单,主要是把MongoTarget的配置.FileTarget的配置集成到类中,同时利用缓存依赖来判断是否需要重新创建Logger类,完整代码如下: using NLog; using NLog.Config; using NLog.Mongo; using NLog.Targets; using System; using System.Collections.Generic; using System.IO;

跟王老师学异常(八):开源日志记录工具log4j的使用案例

开源日志记录工具log4j的使用 主讲人:王少华  QQ群号:483773664 学习目标 掌握Log4J在java项目中的应用 一.日志分类及log4j介绍 (一)日志及分类 1 日志 主要用来记录系统运行中一些重要操作信息 便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到原因 2.分类 SQL日志:记录系统执行的SQL语句 异常日志:记录系统运行中发生的异常事件 业务日志:记录系统运行过程.如用户登录.操作记录 (二)Log4j介绍 Log4j是Apac

Linux笔记之终端日志记录工具script

在学习Linux时,有时候终端的打印消息对于我们非常重要,但是终端显示也是有一定的缓冲空间的,当打印信息非常多时,前面的信息就会被覆盖掉,所以这里网上搜索了一下这方面的介绍,现总结如下: script 是一个非常使用的工具,同时也足够的好玩.script 能够将终端的会话过程录制下来,然后使用 scriptreplay 就可以将其录制的结果播放给他人观看.script 的好处就在于,你在终端中的所有操作过程,它都可以原原本本地进行录制.我们可以将这种录制应用在很多方面,诸如教学.演示等等. 一般

Java日志记录工具SLF4J介绍

SLF4J是什么 SLF4J是一个包装类,典型的facade模式的工具,对用户呈现统一的操作方式,兼容各种主流的日志记录框架,典型的有log4j/jdk logging/nop/simple/jakarta commons logging等. 有张图比较形象直观的展示这个知识: 下面给出几个maven配置的例子 logback-classic <dependency>   <groupId>ch.qos.logback</groupId>  <artifactId

log4j2和logback动态修改日志级别工具类

工作中,有些场景需要动态修改线上日志记录器的打印日志级别, 本文的两个工具类使用的版本如下: ----------------logback--------------------- <dependency>   <groupId>ch.qos.logback</groupId>   <artifactId>logback-core</artifactId>   <version>1.1.8</version></d

(工具类)Linux笔记之终端日志记录工具script

在学习Linux时,有时候终端的打印消息对于我们很重要,可是终端显示也是有一定的缓冲空间的.当信息打印许多时,前面的信息就会被覆盖掉.所以这里网上搜索了一下这方面的介绍.现总结例如以下: script 是一个非常使用的工具,同一时候也足够的好玩.script 能够将终端的会话过程录制下来,然后使用 scriptreplay 就能够将其录制的结果播放给他人观看.script 的优点就在于.你在终端中的全部操作过程,它都能够原原本本地进行录制. 我们能够将这样的录制应用在非常多方面,诸如教学.演示等

java中开源日志记录工具log4j

日志:除了能记录异常信息,还可以记录程序正常运行时的关键信息. 使用log4j来进行日志文件记录经典步骤: 001.在项目中创建一个lib文件夹,然后将下载好的jar包copy到该文件夹下 002.对已经copy过来的jar包,点击右键,然后执行下图操作, 项目中就会多出一个引入外部Library的项目 003.在src目录下创建一个名称为log4j.properties文件 004.编写,粘贴已经写好的配置文件内容,编码方式可以做下修正.对配置文件点击右键→属性→other→utf-8,然后应

php之框架增加日志记录功能类

<?php /* 思路:给定文件,写入读取(fopen ,fwrite……) 如果大于1M 则重写备份 传给一个内容, 判断大小,如果大于1M,备份 小于则写入 */ class Log{ //定义一个常量,创建一个文件的名称 const LOGFILE = 'curr.log'; //写入文件 public static function write($cont){ $cont .="\r\n"; $log = self::isBak(); //计算文件的地址,判断大小 $fh

Crashlytics——崩溃日志记录工具

简介 Crashlytic 成立于2011年,是专门为移动应用开者发提供的保存和分析应用崩溃信息的工具.Crashlytics的使用者包括:支付工具Paypal, 点评应用Yelp, 照片分享应用Path, 团购应用GroupOn等移动应用. 2013年1月,Crashlytics被Twitter收购,成为又一个成功的创业产品.被收购之后,由于没有了创业公司的不稳定因素,我们更有理由使用它来分析应用崩溃信息. 使用Crashlytics的好处有: 1.Crashlytics不会漏掉任何应用崩溃信