393 votes

Où Console.WriteLine va-t-il dans ASP.NET?

Dans une application J2EE (comme celui en cours d'exécution dans WebSphere), lorsque j'utilise System.out.println(), mon texte va à la norme, qui est associé à un fichier par la console d'administration WebSphere.

Dans un ASP.NET application (comme un exécutant IIS), d'où la sortie d' Console.WriteLine() aller? Le processus IIS doit avoir un stdin, stdout et stderr; mais stdout est mappé à la version Windows de /dev/null ou alors j'ai loupé un concept clé ici?

Je suis ne demande pas si je dois le journal (j'utilise log4net), mais où est la sortie de go? Ma meilleure info est venu de cette discussion où ils disent Console.SetOut() pouvez modifier l' TextWriter, mais il n'a toujours pas la réponse à la question sur ce que la valeur initiale de la Console, ou comment le configurer dans le fichier config/en dehors de l'exécution du code.

851voto

Greg Bernhardt Points 3453

Si vous utilisez System.Diagnostics.Debug.WriteLine(...) au lieu de Console.WriteLine() , vous pouvez voir les résultats dans la fenêtre Sortie de Visual Studio.

230voto

Ruben Points 8393

Si vous regardez l' Console de la classe dans le Réflecteur, vous verrez que si un processus n'est pas associé à une console, Console.Out et Console.Error sont soutenus par l' Stream.Null (enroulé à l'intérieur d'un TextWriter), qui est un mannequin de mise en œuvre de l' Stream qui ignore fondamentalement de tous les intrants, et ne donne aucune réponse.

C'est donc conceptuellement équivalents à /dev/null, mais la mise en œuvre est plus simple: il n'y a pas de réelle IO lieu avec le périphérique null.

Aussi, en dehors de l'appelant SetOut, il n'y a aucun moyen de configurer la valeur par défaut.

30voto

Artur Carvalho Points 2459

J'ai trouvé cette question en essayant de modifier la sortie du Journal de la DataContext de la fenêtre de sortie. Donc, pour quelqu'un d'autre qui tente de faire de même, ce que j'ai fait était de créer ceci:

class DebugTextWriter : System.IO.TextWriter {
   public override void Write(char[] buffer, int index, int count) {
       System.Diagnostics.Debug.Write(new String(buffer, index, count));
   }

   public override void Write(string value) {
       System.Diagnostics.Debug.Write(value);
   }

   public override Encoding Encoding {
       get { return System.Text.Encoding.Default; }
   }
}

Et après que: dc.Journal = new DebugTextWriter() et je peux voir toutes les requêtes dans la fenêtre de sortie (dc) est le DataContext).

Jetez un oeil à cette pour plus d'info: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

19voto

Chris Points 1

Si vous utilisez IIS Express et de le lancer via une Invite de Commande, il va quitter la fenêtre dos s'ouvrir et vous verrez la Console.Instructions d'écriture.

MODIFIER

Ainsi, par exemple, d'obtenir une commande de fenêtre ouverte et tapez:

"C:\Program Files (x86)\IIS Express\iisexpress" /path:C:\Projects\Website1 /port:1655

Cela suppose que vous avez un répertoire du site web à C:\Projects\Website1. Il va commencer IIS Express et de servir les pages de votre site d'annuaire. Elle partira de la commande ouvrir les fenêtres et vous verrez les informations de sortie de là. Disons que vous avez un fichier il y a par défaut.aspx avec ce code:

<%@ Page Language="C#" %>
<html>
<body>
    <form id="form1" runat="server">
    Hello!

    <% for(int i = 0; i < 6; i++) %> 
       <% { Console.WriteLine(i.ToString()); }%>

    </form>
</body>
</html>

Organiser votre navigateur et de commande de windows de sorte que vous pouvez voir à la fois sur l'écran. Maintenant, tapez dans votre navigateur: http://localhost:1655/ vous verrez sur la page web Bonjour!, mais dans la fenêtre de commande, vous verrez quelque chose comme

Request started: "GET" http://localhost:1655/
0
1
2
3
4
5
Request ended: http://localhost:1655/default.aspx with HTTP status 200.0

J'ai fait simple en ayant le code dans un bloc de code dans la balise, mais n'importe quelle console déclarations dans votre code, ou n'importe où dans votre code va afficher ici.

7voto

Craig Tyler Points 302

Il n'y a simplement pas de console à écouter par défaut. En mode de débogage, il y a une console connectée, mais dans un environnement de production c'est comme vous le pensiez, le message ne va nulle part parce que rien n'écoute.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X