Maison base de données tutoriel mysql RTP记录log的机制

RTP记录log的机制

Jun 07, 2016 pm 03:57 PM
log rtp nous 机制 记录

我们 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 $
Copier après la connexion

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

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

text     strbuf[BUFLEN+1];
Copier après la connexion

然后用下面的语句:

    strcpy((char *)strbuf,"");
    sprintf((char *)strbuf,"RVTUQ:370 req_line_id %ld\n", (long)req_line_id);
    Debug(strbuf,TRUE,TRUE);
Copier après la connexion

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

#define Debug(message,check_sql_error,no_rows_is_error)
Copier après la connexion

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

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

    EXEC SQL
Copier après la connexion
然后下面写上 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;
Copier après la connexion

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

pouersql("RVTUQ", "134", FALSE )
Copier après la connexion
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()" )
Copier après la connexion
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 );
}
Copier après la connexion
sqlglm() 函数把错误消息写入 msg, 然后只要把 msg 用 Debug() 函数写入日志就可以了. sqlglm() 函数对字数也有限制, 最大为512 个字符. 相比 sqlerrmc 的70 个字符多很多了.
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Où puis-je consulter les enregistrements des articles que j'ai achetés sur Pinduoduo ? Comment consulter les enregistrements des produits achetés ? Où puis-je consulter les enregistrements des articles que j'ai achetés sur Pinduoduo ? Comment consulter les enregistrements des produits achetés ? Mar 12, 2024 pm 07:20 PM

Le logiciel Pinduoduo fournit de nombreux bons produits, vous pouvez les acheter à tout moment et n'importe où, et la qualité de chaque produit est strictement contrôlée, chaque produit est authentique et il existe de nombreuses remises d'achat préférentielles, permettant à chacun d'acheter en ligne. Entrez votre numéro de téléphone mobile pour vous connecter en ligne, ajoutez plusieurs adresses de livraison et informations de contact en ligne et vérifiez les dernières tendances logistiques à tout moment. Les sections de produits de différentes catégories sont ouvertes, recherchez et balayez de haut en bas pour acheter et passer des commandes, et. Faites l'expérience de la commodité sans quitter la maison. Avec le service d'achat en ligne, vous pouvez également consulter tous les enregistrements d'achat, y compris les produits que vous avez achetés, et recevoir gratuitement des dizaines d'enveloppes rouges et de coupons d'achat. L'éditeur a désormais fourni aux utilisateurs de Pinduoduo un aperçu détaillé en ligne. moyen d'afficher les enregistrements de produits achetés. 1. Ouvrez votre téléphone et cliquez sur l'icône Pinduoduo.

Comment consulter l'historique des appels sur iPhone et l'exporter ? Comment consulter l'historique des appels sur iPhone et l'exporter ? Jul 05, 2023 pm 12:54 PM

L'enregistrement des appels sur iPhone est souvent sous-estimé et constitue l'une des fonctionnalités les plus critiques de l'iPhone. Grâce à sa simplicité, cette fonctionnalité est d'une importance vitale et peut fournir des informations importantes sur les appels passés ou reçus sur l'appareil. Que ce soit à des fins professionnelles ou dans le cadre d'une procédure judiciaire, la possibilité d'accéder aux enregistrements d'appels peut s'avérer inestimable. En termes simples, l'historique des appels fait référence aux entrées créées sur votre iPhone chaque fois que vous passez ou recevez un appel. Ces journaux contiennent des informations clés, notamment le nom du contact (ou son numéro s'il n'est pas enregistré en tant que contact), l'horodatage, la durée et l'état de l'appel (composé, manqué ou sans réponse). Ils constituent un enregistrement concis de votre historique de communication. L'historique des appels comprend des bandes d'historique des appels stockées sur votre iPhone

Comment afficher et gérer l'historique des commandes Linux Comment afficher et gérer l'historique des commandes Linux Aug 01, 2023 pm 09:17 PM

Comment afficher l'historique des commandes sous Linux Sous Linux, nous utilisons la commande history pour afficher la liste de toutes les commandes précédemment exécutées. Sa syntaxe est très simple : history Certaines options de couplage avec la commande history incluent : Description de l'option -c efface l'historique des commandes pour la session en cours -w écrit l'historique des commandes dans un fichier -r recharge l'historique des commandes à partir du fichier historique - n Limiter le nombre de sorties de commandes récentes Exécutez simplement la commande history pour voir une liste de toutes les commandes précédemment exécutées dans un terminal Linux : En plus de visualiser l'historique des commandes, vous pouvez également gérer l'historique des commandes et effectuer des modifications sur les commandes précédemment exécutées, inverser rechercher l'historique des commandes ou même supprimer complètement l'historique

Comment afficher l'historique de votre journal de médicaments dans l'application Santé sur iPhone Comment afficher l'historique de votre journal de médicaments dans l'application Santé sur iPhone Nov 29, 2023 pm 08:46 PM

iPhone vous permet d’ajouter des médicaments dans l’application Santé pour suivre et gérer les médicaments, vitamines et suppléments que vous prenez quotidiennement. Vous pouvez ensuite enregistrer les médicaments que vous avez pris ou ignorés lorsque vous recevez une notification sur votre appareil. Après avoir enregistré vos médicaments, vous pouvez voir à quelle fréquence vous les avez pris ou sautés pour vous aider à suivre votre état de santé. Dans cet article, nous vous guiderons pour afficher l'historique des journaux de médicaments sélectionnés dans l'application Santé sur iPhone. Un petit guide sur la façon d'afficher l'historique de votre journal de médicaments dans l'application Santé : Accédez à l'application Santé > Parcourir > Médicaments > Médicaments > Sélectionner un médicament > Options

Conseils de développement C# : systèmes de journalisation et de surveillance Conseils de développement C# : systèmes de journalisation et de surveillance Nov 22, 2023 pm 08:30 PM

Suggestions de développement C# : Résumé du système de journalisation et de surveillance : Dans le processus de développement logiciel, les systèmes de journalisation et de surveillance sont des outils cruciaux. Cet article présentera le rôle et les suggestions de mise en œuvre des systèmes de journalisation et de surveillance dans le développement C#. Introduction : La journalisation et la surveillance sont des outils essentiels dans les projets de développement logiciel à grande échelle. Ils peuvent nous aider à comprendre l’état d’exécution du programme en temps réel et à découvrir et résoudre rapidement les problèmes. Cet article explique comment utiliser les systèmes de journalisation et de surveillance dans le développement C# pour améliorer la qualité des logiciels et l'efficacité du développement. Le rôle du système de journalisation

Comment enregistrer et surveiller les projets de développement Java Comment enregistrer et surveiller les projets de développement Java Nov 03, 2023 am 10:09 AM

Comment enregistrer et surveiller les projets de développement Java 1. Introduction générale Avec le développement rapide d'Internet, de plus en plus d'entreprises ont commencé à développer Java et à créer différents types d'applications. Dans le processus de développement, la journalisation et la surveillance constituent un lien important qui ne peut être ignoré. Grâce à la journalisation et à la surveillance, les développeurs peuvent découvrir et résoudre les problèmes à temps pour garantir la stabilité et la sécurité des applications. 2. L'importance de la journalisation 1. Suivi des problèmes : Lorsqu'une erreur d'application se produit, la journalisation peut nous aider à localiser rapidement le problème.

Utilisez la fonction math.Log2 pour calculer le logarithme en base 2 d'un nombre spécifié Utilisez la fonction math.Log2 pour calculer le logarithme en base 2 d'un nombre spécifié Jul 24, 2023 pm 12:14 PM

Utilisez la fonction math.Log2 pour calculer le logarithme en base 2 d'un nombre spécifié. En mathématiques, le logarithme est un concept important qui décrit la relation exponentielle d'un nombre à un autre (la soi-disant base). Parmi eux, le logarithme en base 2 est particulièrement courant et fréquemment utilisé dans les domaines de l’informatique et des technologies de l’information. Dans le langage de programmation Python, nous pouvons calculer le logarithme base 2 d'un nombre à l'aide de la fonction log2 de la bibliothèque mathématique. Voici un exemple de code simple : importmathdef

Compréhension approfondie des mécanismes de recalcul et de rendu de la mise en page CSS Compréhension approfondie des mécanismes de recalcul et de rendu de la mise en page CSS Jan 26, 2024 am 09:11 AM

La redistribution et le repaint CSS sont des concepts très importants dans l'optimisation des performances des pages Web. Lors du développement de pages Web, comprendre le fonctionnement de ces deux concepts peut nous aider à améliorer la vitesse de réponse et l'expérience utilisateur de la page Web. Cet article approfondira les mécanismes de redistribution et de repeinture CSS et fournira des exemples de code spécifiques. 1. Qu'est-ce que la redistribution CSS ? Lorsque la visibilité, la taille ou la position des éléments dans la structure DOM change, le navigateur doit recalculer et appliquer les styles CSS, puis réorganiser

See all articles