RTP记录log的机制
我们 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
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 )
这里面有三个参数, 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()" )
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 ); }

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds





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.

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 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

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

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 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é. 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

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
