2009-03-16 7 views
8

Je voudrais savoir, où va java standard stderr?Où va java stderr?

Je sais que je peux changer le fichier stderr en utilisant System.setErr, qui 'réassigne le "flux de sortie d'erreur" standard ".', Mais je ne sais pas, lequel est" standard ".

Je voudrais préciser ma question plus: J'ai la bibliothèque C++ que j'utilise dans java (jni). Le problème est qu'il semble que je ne peux pas voir la sortie de stderr, qui vient de ma bibliothèque C++. J'appelle assert() dans la bibliothèque C++ et je ne vois pas la sortie dans la console, quand je lance l'API Java qui utilise la bibliothèque.

+0

Avez-vous essayé System.stderr.writeln ("Je suis ici")? Qu'as-tu vu? –

Répondre

3

Par défaut, System.err est la console, tout comme System.out.

-1

Le flux de sortie d'erreur standard va vers la console. Ce flux est déjà ouvert et prêt à accepter les données de sortie. Pour plus de détails, voir le java sun api pour plus de détails.

+1

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. – Linuxios

+0

Oui, vous avez raison, je vais le changer! – Tobias

14

Il va au flux d'erreur standard du processus, quel que soit ce qui est configuré pour être.

  • Si vous exécutez l'application à partir d'une console, elle écrira probablement aussi sur la console.
  • Dans une interface graphique, les sorties/erreurs standard sont souvent abandonnées, c'est-à-dire que la sortie est perdue.
  • Dans un service (par exemple un serveur Web), l'erreur/la sortie standard est généralement capturée quelque part dans un fichier journal pivoté, mais cela dépend entièrement du service.

La plupart des plates-formes vous permettent de rediriger le flux d'erreurs standard ailleurs (par exemple vers un fichier texte).

L'idée de System.setErr est de vous permettre de ne pas utiliser le flux d'erreur standard du processus lui-même, mais le changer de sorte que les appels à System.err.println etc aller au courant donné.

0

Je viens d'écrire un petit programme de test qui fait un System.err.println et il semble être sorti sur la console.

2

Descripteur de fichier 2 de l'appelant. Où il va de là — dépend de l'appelant. Sur la console, vous pouvez rediriger un autre endroit, comme par exemple:

java Example 2>> errors.log