Les journaux sont nécessaires pour résoudre les échecs de documents, mais il n'est pas nécessaire de consigner le texte intégral.
Des journaux sont nécessaires pour localiser les échecs de traduction, mais il n'est pas nécessaire d'imprimer l'intégralité du contrat, du numéro d'identification ou du jeton de téléchargement. Le journal doit répondre « quelle tâche, à quelle étape et pourquoi elle a échoué » plutôt que de devenir une deuxième bibliothèque de documents dépourvue de gestion des autorisations.
Les journaux sont nécessaires pour résoudre les échecs de traduction de documents, mais il n'est pas nécessaire qu'ils contiennent le texte intégral du contrat, le numéro d'identification ou le jeton de téléchargement. Cet article explique comment faire en sorte que le journal réponde « quelle tâche a échoué à quelle étape et pourquoi » sans copier les documents client dans le journal.
Les lecteurs appropriés sont les développeurs et le personnel d'exploitation et de maintenance qui sont responsables des services de traduction de documents, de l'amarrage des interfaces de traduction ou de la maintenance des journaux d'arrière-plan. Après lecture, vous pouvez concevoir un ensemble de champs de liste blanche, vérifier que le journal ne fait pas ressortir le texte original et définir la période de conservation et la portée d'accès pour le dépannage.
Les exemples utilisent des échantillons synthétiques pour démontrer les méthodes de traitement, et le code a été vérifié dans un environnement isolé, mais cela ne représente pas une garantie de tous les fichiers réels ou des performances du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation ci-dessous.
Que doit-on enregistrer dans le journal de dépannage ? Conclusion en une phrase
Le journal enregistre uniquement les champs autorisés tels que l'ID de tâche, l'étape, la catégorie d'erreur et la consommation de temps, mais n'enregistre pas le contenu du document ni les informations d'identification.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
| Besoin de savoir quelle tâche a échoué | Enregistrer un ID de tâche interne aléatoire | Possibilité de localiser les problèmes sans exposer les noms ou chemins de fichiers utilisateur |
| Besoin de déterminer à quelle étape se trouve la carte | Enregistrez le nom de la scène et le temps pris | Pas besoin de chaque texte source et traduction |
| La demande a été rejetée par l'amont | Enregistrer les catégories d'erreurs normalisées | Le contenu complet de la demande d'authentification de première classe ne doit pas être saisi dans le journal |
| Il faut revenir à l'original pour le dépannage | Utiliser des références dans un système contrôlé | Les liens qui peuvent être téléchargés publiquement en permanence risquent d'être divulgués |
Commencez par les champs autorisés à enregistrer
La liste noire peut facilement manquer de nouveaux champs sensibles. Une approche plus prudente consiste à afficher uniquement les champs conçus, par exemple :
- ID de tâche interne
- Étape de traitement
- catégorie d'erreur
- prend du temps
L'exemple de synthèse ci-dessous utilise une projection de liste blanche afin que le texte intégral et les jetons de l'entrée ne soient pas saisis dans le journal.
Le journal de vérification n'a pas fait ressortir le texte original.
import io
import json
import logging
ALLOWED = ("job_id", "stage", "error_code", "elapsed_ms")
def log_record(data):
return {key: data[key] for key in ALLOWED if key in data}
stream = io.StringIO()
logger = logging.getLogger("synthetic-document-job")
logger.handlers.clear()
logger.propagate = False
logger.setLevel(logging.INFO)
handler = logging.StreamHandler(stream)
logger.addHandler(handler)
event = {"job_id": "demo-12", "stage": "parse", "error_code": "BAD_CONTAINER",
"elapsed_ms": 42, "document_text": "synthetic confidential clause",
"access_token": "synthetic-secret"}
logger.info(json.dumps(log_record(event), sort_keys=True))
logged = json.loads(stream.getvalue())
assert logged["error_code"] == "BAD_CONTAINER"
assert "document_text" not in logged
assert "synthetic-secret" not in stream.getvalue()
assert set(logged) <= set(ALLOWED)
logger.removeHandler(handler)
L'exemple modifie uniquement l'enregistreur de démonstration auto-nommé. Il n'est pas recommandé de supprimer le gestionnaire global de l'application dans la bibliothèque métier. Les valeurs des champs doivent encore être vérifiées pour la longueur et le type. Si vous insérez le texte intégral de l'utilisateur dans error_code, le nom de la liste blanche à lui seul ne vous sauvera pas.
Identifiez les identifiants associés au lieu de contenu sensible
Le tableau ci-dessous liste les besoins courants lors de l’inspection, ainsi que le contenu des dossiers de recommandations et de non-recommandations.
| Questions que je veux examiner | Disques recommandés | Il n’est pas recommandé d’enregistrer cela |
|---|---|---|
| Quelle mission a échoué | ID de tâche interne aléatoire | Le nom de fichier complet et le chemin de l’utilisateur |
| Quelle étape prend du temps | Étapes et chronophages | Chaque paragraphe du texte source et de la traduction |
| Pourquoi Upstream refuse-t-il ? | Normalisation des catégories d’erreur | Une requête complète avec un en-tête d’authentification |
| Comment retrouver l’original | Références au sein du système contrôlé | Un lien disponible en permanence pour téléchargement public |
La période de rétention est aussi importante que la portée de l’accès
Même si le journal ne contient pas de texte de corps, la combinaison du temps de la tâche, de la langue et de la taille du fichier peut révéler des informations commerciales. Les journaux doivent être accompagnés de contrôles d’accès, de périodes de conservation et de processus de suppression.
Lors du dépannage, augmentez temporairement le niveau du journal, précisez quand reprendre les opérations, et évitez de rester trop longtemps en mode débogage dans l’environnement de production.
L’intégration de traduction fournit également des journaux clairs et restreints
Lors de l’intégration avec OmniDoc (entrée produit), seule l’association entre les tâches locales et distantes est enregistrée ; les fichiers téléchargés par les utilisateurs ne doivent pas être copiés dans les journaux pour faciliter le dépannage.
Un bon rapport de problème peut expliquer le stade de défaillance et les conditions de récurrence, tout en garantissant que les documents clients ne circulent que dans les chemins de traitement autorisés.
Références : Python logging.
📊 Comparaison des noyaux
| Méthode | Avantages | Risque |
|---|---|---|
| Liste noire | La méthode d’écriture est simple et facile à apprendre | Les champs sensibles qui apparaissent facilement sont manqués |
| Liste blanche | Seuls les champs conçus sont produits, avec des frontières claires | Il est nécessaire de planifier les champs à l’avance et de vérifier la longueur et le type des valeurs des champs |
🎯 Quelle méthode te convient ?
Si vous devez trouver une tâche de traduction
Enregistre les identifiants internes de tâches aléatoires et les étapes de défaillance, sans enregistrer le nom ou le chemin complet du fichier de l’utilisateur.
Si vous voulez gérer les erreurs d’interface en amont
Enregistrer les catégories d’erreur standardisées, mais ne pas enregistrer les requêtes complètes avec des en-têtes d’authentification.
Si vous dépannez les problèmes en ligne
Augmentez temporairement les niveaux de journal et restaurez immédiatement après inspection.
Si tu veux concevoir des champs de logarithmes
Priorisez la mise en liste blanche et vérifiez la longueur et le type de valeurs des champs.
❓ Foire aux questions (FAQ)
1. Le journal peut-il enregistrer le nom complet du fichier de l’utilisateur ?
Pas recommandé. Le nom complet du fichier et le chemin ne sont pas recommandés pour l’enregistrement ; vous pouvez utiliser des identifiants internes aléatoires pour les associer à la place.
2. Pourquoi n’est-il pas recommandé d’utiliser une liste noire pour filtrer les champs sensibles ?
Les listes noires ont tendance à manquer les champs sensibles nouvellement émergés, tandis que les listes blanches ne produisent que des champs conçus, ce qui les rend plus fiables.
3. Avez-vous seulement besoin de gérer le temps de la tâche et la taille du fichier ?
Oui. Ensemble, ces informations peuvent également révéler des détails métier, et les journaux doivent être accompagnés de contrôles d’accès, de périodes de conservation et de processus de suppression.
4. Les journaux de débogage peuvent-ils rester ouverts longtemps pendant le dépannage ?
Pas recommandé. Après une mise à niveau temporaire du journal, il est important de spécifier quand reprendre le mode de débogage afin d’éviter de laisser le mode de débogage trop longtemps en production.
5. Pouvez-vous effacer le gestionnaire global de la base de données métier ?
Pas recommandé. L’exemple ne modifie que le démo logger que vous avez nommé vous-même ; la bibliothèque métier ne doit pas être vidée de l’application globale du gestionnaire.
📝 Résumé
Lors du dépannage des échecs de traduction, le journal doit répondre à la tâche, à la phase et à la raison, plutôt que de sauvegarder le contenu du document. Utiliser des champs de liste blanche, des citations contrôlées et des périodes de conservation claires est essentiel pour équilibrer efficacité de dépannage et sécurité des documents.


