RTP记录log的机制

Jun 07, 2016 pm 03:57 PM
log rtp 私たち 機構 記録

我们 RCV 这边经常跑的一个concurrent request RTP: Receiving Transaction Processor, 主要是用来处理 RCV_TRANSACTIONS_INTERFACE 里面的数据的. 这个 concurrent program 里面包含许多文件, 比较重要的有: ident RVCTPRVCTP: $Header: rvctp.oc 120.0.120

我们 RCV 这边经常跑的一个concurrent request RTP: Receiving Transaction Processor, 主要是用来处理 RCV_TRANSACTIONS_INTERFACE 里面的数据的.

\

这个 concurrent program 里面包含许多文件, 比较重要的有:

ident RVCTP
RVCTP:
     $Header: rvctp.oc  120.0.12000000.1 2007/01/16 23:53:49 appldev ship $
     $Header: rvtbm.lpc 120.13.12010000.10 2013/03/15 02:51:16 zhlee ship $ 
     $Header: rvtpt.lpc 120.28.12010000.33 2013/07/15 07:12:37 smai ship $
     $Header: rvtvq.lpc 120.8.12010000.17 2013/04/03 11:40:30 wayin ship $
     $Header: rvtuq.lpc 120.9.12000000.7 2009/07/07 09:47:49 YUZZHANG01 ship $
     $Header: pouer.lpc 120.2 2006/06/14 07:57:02 arudas noship $
     $Header: rvtlo.lpc 120.1.12010000.7 2013/01/05 16:02:14 gke ship $
     $Header: rvtoc.lpc 120.1.12010000.5 2013/03/28 22:38:31 vthevark ship $
     $Header: rvtpa.lc  120.6.12010000.3 2009/07/07 08:58:22 ksivasa ship $
     $Header: rvtpd.lc  120.1.12010000.3 2009/07/07 09:03:17 ksivasa ship $
     $Header: rvtsh.lpc 120.10.12010000.3 2009/03/06 22:09:40 vthevark ship $
     $Header: rvtth.lpc 120.29.12010000.9 2012/05/30 15:50:03 gke ship $
     $Header: rvtvt.lpc 120.9.12010000.10 2013/03/28 18:19:11 vthevark ship $
     $Header: rvsco.lpc 120.4.12010000.12 2012/09/27 23:10:24 vthevark ship $
     $Header: rvsrv.lpc 120.4.12010000.16 2013/02/04 07:34:37 zhizheng ship $
     $Header: rvsit.lpc 120.5.12010000.6 2013/02/04 07:26:30 zhizheng ship $
     $Header: rvsdl.lpc 120.5.12010000.17 2011/11/28 05:19:19 xiameng ship $
     $Header: rvssh.lpc 120.2.12010000.3 2009/07/07 09:56:26 ksivasa ship $
     $Header: rvsut.lpc 120.3.12010000.14 2012/05/28 04:53:57 gke ship $
     $Header: rvtcl.lpc 120.6.12010000.3 2009/07/07 09:15:25 ksivasa ship $
     $Header: rvtii.lpc 120.19.12010000.27 2013/08/14 09:58:23 gke ship $
     $Header: rvtls.lpc 120.7.12010000.14 2012/01/30 12:31:22 ksivasa ship $
     $Header: rvtoo.lpc 120.3.12010000.3 2009/07/07 09:08:40 ksivasa ship $
     $Header: rvsrq.lpc 120.5.12010000.3 2009/07/07 09:53:56 ksivasa ship $
     $Header: rvspo.lpc 120.3.12010000.3 2009/07/07 09:53:12 ksivasa ship $
ログイン後にコピー

这些文件是在 RTP log 里面经常见到的. 这里我们主要看看, 在这些文件中是用怎样的机制写 log 的.

首先, 要在要写日志的函数里面声明一个变量:

text     strbuf[BUFLEN+1];
ログイン後にコピー

然后用下面的语句:

    strcpy((char *)strbuf,"");
    sprintf((char *)strbuf,"RVTUQ:370 req_line_id %ld\n", (long)req_line_id);
    Debug(strbuf,TRUE,TRUE);
ログイン後にコピー

第一句把 strbuf 清空, 然后把后面的字符串和整型数写入 strbuf, 第三句 Debug 把 strbuf 写入日志. Debug 后面有两个参数:

#define Debug(message,check_sql_error,no_rows_is_error)
ログイン後にコピー

第二个参数 check_sql_error 表示 如果希望检查 SQL error, 就设为 TRUE, 否则设为 FALSE. no_rows_is_error 表示 是不是把 NO_DATA_FOUND 当做一个 error. 如果是, 设为TRUE.

Concurrent Request 里面的文件都是 .c 的代码, 如果里面要写SQL, 就要写一句:

    EXEC SQL
ログイン後にコピー
然后下面写上 SQL. 这句 SQL 有可能会出错, 这时需要一个方法把错误消息写到 log 里面去. 比如:
       EXEC SQL
       select transaction_id,
              unit_of_measure
         into :parent_trx_id,
              :rec_uom
         from rcv_transactions
        where transaction_type in ('RECEIVE','MATCH')
        start with transaction_id = :p_trx_id 
   connect by transaction_id = prior parent_transaction_id;
ログイン後にコピー

为了捕获这句SQL 可能发生的错误, 我们在这句后面写一句:

pouersql("RVTUQ", "134", FALSE )
ログイン後にコピー
pouersql() 这个函数是在 pouer.lpc 文件 (po user error) 中定义的, 如果上面的SQL 发生了错误, 那么就会把 error message 写入 message stack. 并且返回 true.

这里面有三个参数, routine, location, no_rows_is_err.

routine 表示SQL 发生错误的文件名, 上面的例子中是 RVTUQ.

location 表示SQL 发生错误的位置, 上面的例子中是 134. 这样我们看到日志里面的这个位置就很容易定位到这句SQL.

no_rows_is_err 表示 是不是把 NO_DATA_FOUND 当做 error 来处理. 上面的例子中我们没有当做 error.

在 pouersql 这个函数的内部, 会去sqlca 里面提取 sqlcode. sqlca 全称是: sql communications area, 是一个用来记录SQL 执行信息的地方. 每次执行一个SQL 都会返回 sqlcode. 如果sqlcode = 0, 那么表示没有错误. 如果 sqlcode > 0, 表示有exception, 如果 sqlcode < 0, 表示发生 error, 要rollback. 我们平时接触的error 都是小于0 的, 但是 NO_DATA_FOUND 是 大于0 的, 代码 1403. pousersql() 函数会去 sqlca 里面提取 sqlcode, 然后判断是否 sqlcode < 0 还是 sqlcode > 0, 如果判断小于0, 那么才把错误消息写入 message stack. 如果大于0, 并且参数里面 no_rows_is_err 设为 TRUE, 那么也会写如message stack.

每次执行一次 SQL 就会更新一次 sqlca, 所以这个结构只记录最近一次执行SQL 的信息 . 错误消息是记录在sqlca.sqlerrm.sqlerrmc 里面的. 所以会把这个里面的字符串写入message stack. 但是sqlerrmc 最多只能记录70 个字符, 所以如果错误消息很长的话, 就会被截断.

上面的SQL 发生错误的话, pouersql () 返回值为 TRUE. 那么在调用这个函数的地方, 比如 rvtpt.lpc 文件中, 就会捕捉到这个返回值, 判断返回值之后确定发生error 了, 就会调用:

pouertrace( "RVTUQ", "000", "rvtuqdebitmemo()" )
ログイン後にコピー
pouertrace () 这个函数也是在pouer.lpc 文件中定义的, 这个函数的返回值总是 false. 它的主要作用也是把错误消息写入 message stack. 三个参数分别为:

file: 表示发生错误的文件
location: 表示错误的位置
subroutine: 表示发生错误的函数.

上面我们提到, sqlerrmc 只能保存70 个字符. 如果错误消息多余70 个字符, 想要得到所有的错误消息的话, 就需要用 sqlglm() 函数. 在使用这个函数之前, 我们要确保 sqlcode < 0, 否则取出来的错误消息是前面的SQL 的消息.

if (pouersql("RVTUQ","019",TRUE))
{                           
   char msg[510];
   size_t buf_len, msg_len;
   buf_len = sizeof (msg);
   sqlglm(msg, &buf_len, &msg_len);
                
   strcpy((char *)strbuf,"");
   sprintf((char *)strbuf,"RVTUQ:001 YU SQL ERROR %s \n", (text *) msg);
   Debug(strbuf,TRUE,TRUE);
   return( FALSE );
}
ログイン後にコピー
sqlglm() 函数把错误消息写入 msg, 然后只要把 msg 用 Debug() 函数写入日志就可以了. sqlglm() 函数对字数也有限制, 最大为512 个字符. 相比 sqlerrmc 的70 个字符多很多了.
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Pinduoduo で購入したものの記録はどこで確認できますか? 購入した製品の記録を表示するにはどうすればよいですか? Pinduoduo で購入したものの記録はどこで確認できますか? 購入した製品の記録を表示するにはどうすればよいですか? Mar 12, 2024 pm 07:20 PM

Pinduoduo ソフトウェアは多くの優れた製品を提供し、いつでもどこでも購入でき、各製品の品質は厳しく管理され、すべての製品は正規品であり、多くの優遇ショッピング割引があり、誰もがオンラインで買い物をすることができます。携帯電話番号を入力してオンラインにログインし、オンラインで複数の配送先住所や連絡先情報を追加し、最新の物流動向をいつでも確認できます さまざまなカテゴリの商品セクションが開き、検索して上下にスワイプして購入および注文することができます家から出ることなく利便性を体験することができます.オンライン ショッピング サービスでは、購入した商品を含むすべての購入記録を確認することもでき、数十のショッピング赤い封筒とクーポンを無料で受け取ることもできます.今回、編集者は Pinduoduo ユーザーに詳細なオンライン サービスを提供しました購入した製品の記録を表示する方法。 1. 携帯電話を開き、Pinduoduo アイコンをクリックします。

Linux コマンド履歴を表示および管理する方法 Linux コマンド履歴を表示および管理する方法 Aug 01, 2023 pm 09:17 PM

Linux でコマンド履歴を表示する方法 Linux では、history コマンドを使用して、以前に実行されたすべてのコマンドのリストを表示します。構文は非常に単純です:history History コマンドと組み合わせるオプションには次のものがあります: オプションの説明 -c 現在のセッションのコマンド履歴をクリアします -w コマンド履歴をファイルに書き込みます -r 履歴ファイルからコマンド履歴を再ロードします - n 最近のコマンドの出力数を制限するhistory コマンドを実行するだけで、Linux ターミナルで以前に実行されたすべてのコマンドのリストが表示されます。コマンド履歴の表示に加えて、コマンド履歴を管理したり、以前に実行したコマンドの変更を実行したり、逆に実行したりすることもできます。コマンド履歴を検索したり、履歴を完全に削除したりすることもできます

iPhoneの通話履歴を確認してエクスポートするにはどうすればよいですか? iPhoneの通話履歴を確認してエクスポートするにはどうすればよいですか? Jul 05, 2023 pm 12:54 PM

iPhone の通話録音は過小評価されがちですが、iPhone の最も重要な機能の 1 つです。この機能はシンプルであるため非常に重要であり、デバイス上で発信または受信された通話に関する重要な洞察を提供できます。仕事の目的でも、法的手続きの場合でも、通話記録にアクセスできる機能は非常に貴重であることがわかります。簡単に言うと、通話履歴とは、電話をかけたり受けたりするたびに iPhone に作成されるエントリを指します。これらのログには、連絡先の名前 (連絡先として保存されていない場合は番号)、タイムスタンプ、継続時間、通話ステータス (ダイヤル、不在、応答なし) などの重要な情報が含まれています。これらはあなたの通信履歴の簡潔な記録です。通話履歴には、iPhone に保存されている通話履歴ストリップが含まれます

iPhoneのヘルスケアアプリで薬の記録履歴を表示する方法 iPhoneのヘルスケアアプリで薬の記録履歴を表示する方法 Nov 29, 2023 pm 08:46 PM

iPhone では、ヘルスケア App に薬を追加して、毎日摂取する薬、ビタミン、サプリメントを追跡および管理できます。デバイスで通知を受信したときに、服用した薬またはスキップした薬を記録できます。薬を記録すると、どれくらいの頻度で薬を服用したか、または服用しなかったかを確認できるので、健康状態を追跡するのに役立ちます。この記事では、iPhone のヘルスケア アプリで選択した薬のログ履歴を表示する方法を説明します。ヘルスケア アプリで薬の記録履歴を表示する方法に関する短いガイド: ヘルスケア アプリ > 参照 > 薬 > 薬 > 薬の選択 > オプション&a に移動します。

C# 開発のアドバイス: システムのログ記録と監視 C# 開発のアドバイス: システムのログ記録と監視 Nov 22, 2023 pm 08:30 PM

C# 開発に関する提案: ログおよび監視システムの概要: ソフトウェア開発プロセスでは、ログおよび監視システムは重要なツールです。この記事では、C# 開発におけるログ記録および監視システムの役割と実装に関する提案を紹介します。はじめに: ロギングとモニタリングは、大規模なソフトウェア開発プロジェクトにおいて不可欠なツールです。これらは、プログラムの実行状況をリアルタイムで把握し、問題を迅速に発見して解決するのに役立ちます。この記事では、C# 開発でログおよび監視システムを使用してソフトウェアの品質と開発効率を向上させる方法について説明します。ロギングシステムの役割

Java 開発プロジェクトをログに記録して監視する方法 Java 開発プロジェクトをログに記録して監視する方法 Nov 03, 2023 am 10:09 AM

Java 開発プロジェクトを記録および監視する方法 1. 背景の紹介 インターネットの急速な発展に伴い、ますます多くの企業が Java を開発し、さまざまな種類のアプリケーションを構築し始めています。開発プロセスでは、ロギングとモニタリングは無視できない重要なリンクです。開発者は、ロギングと監視を通じて問題を発見して時間内に解決し、アプリケーションの安定性とセキュリティを確保できます。 2. ログの重要性 1. 問題の追跡: アプリケーション エラーが発生した場合、ログは問題を迅速に特定するのに役立ちます。

math.Log2 関数を使用して、指定された数値の底 2 の対数を計算します。 math.Log2 関数を使用して、指定された数値の底 2 の対数を計算します。 Jul 24, 2023 pm 12:14 PM

math.Log2 関数を使用して、指定した数値の底 2 の対数を計算します。数学において、対数は、ある数値と別の数値 (いわゆる底) の指数関係を説明する重要な概念です。その中でも、底 2 の対数は特に一般的であり、コンピュータサイエンスや情報技術の分野で頻繁に使用されます。 Python プログラミング言語では、数学ライブラリの log2 関数を使用して、数値の底 2 の対数を計算できます。簡単なコード例を次に示します: importmathdef

CSS レイアウトの再計算とレンダリングの仕組みを深く理解する CSS レイアウトの再計算とレンダリングの仕組みを深く理解する Jan 26, 2024 am 09:11 AM

CSS のリフローと再描画は、Web ページのパフォーマンスの最適化において非常に重要な概念です。 Web ページを開発する場合、これら 2 つの概念がどのように機能するかを理解すると、Web ページの応答速度とユーザー エクスペリエンスを向上させることができます。この記事では、CSS のリフローと再描画の仕組みを詳しく説明し、具体的なコード例を示します。 1. CSS リフローとは何ですか? DOM 構造内の要素の表示、サイズ、位置が変更されると、ブラウザは CSS スタイルを再計算して適用し、再レイアウトする必要があります。

See all articles