D'où vient la Console.WriteLine entrer ASP.NET je ne sais pas.

dans une application J2EE (comme une application tournant dans WebSphere), quand j'utilise System.out.println() , mon texte va à standard out, qui est mappé à un fichier par la console d'administration WebSphere.

dans un ASP.NET application (comme un tournant dans IIS), où va la sortie de Console.WriteLine() ? Le processus IIS doit avoir un stdin, stdout et stderr; mais est-ce que stdout est mappé à la version Windows de /dev / null ou est-ce que je manque un concept clé ici?

je suis Je ne demande pas si je dois m'y connecter (j'utilise log4net), mais où va la sortie? Ma meilleure info est venue de ce discussion où ils disent Console.SetOut() peut changer le TextWriter , mais il n'a toujours pas répondu à la question sur ce que la valeur initiale de la Console est, ou comment le configurer dans config/en dehors du code d'exécution.

258
demandé sur P. Camilleri 2008-09-26 07:47:41

11 réponses

si vous regardez la classe Console dans réflecteur.net , vous verrez que si un processus n'a pas de console associée, Console.Out et Console.Error sont soutenus par Stream.Null (enveloppé dans un TextWriter ), qui est une implémentation factice de Stream qui ignore fondamentalement toute entrée, et ne donne aucune sortie.

est donc l'équivalent conceptuel de /dev/null , mais la mise en œuvre est plus rationalisée: il n'y a pas L'entrée/sortie réelle ayant lieu avec le dispositif null.

aussi, à part l'appel de SetOut , il n'y a aucun moyen de configurer la valeur par défaut.

162
répondu Ruben 2015-06-29 23:02:29

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

632
répondu Greg Bernhardt 2010-10-20 21:12:35

j'ai trouvé cette question en essayant de changer la sortie Log du DataContext vers la fenêtre de sortie. Donc, à tous ceux qui essayaient de faire la même chose, 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.Log = new DebugTextWriter() et je peux voir toutes les requêtes dans la fenêtre de sortie (dc est le DataContext).

Regardez ceci pour plus d'informations: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers

23
répondu Artur Carvalho 2010-10-09 15:32:41

si vous utilisez IIS Express et que vous le lancez via une invite de commande, il laissera la fenêtre DOS ouverte, et vous y verrez les déclarations Console.Write .

par exemple, ouvrez une fenêtre de commande et tapez:

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

cela suppose que vous avez un répertoire de site web à C:\Projects\Website1. Il lancera IIS Express et servira les pages de votre annuaire de site web. Il laissera les fenêtres de commande ouvertes, et vous va voir les informations de sortie de là. Disons que vous aviez un fichier 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>

Organisez votre navigateur et commandez windows pour que vous puissiez les voir tous les deux à l'écran. Maintenant, tapez dans votre navigateur: http://localhost:1655/ . Vous verrez Bonjour! sur la page web, 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 états votre code derrière ou n'importe où ailleurs dans votre code apparaîtra ici aussi.

14
répondu Chris 2015-06-29 23:15:00

il n'y a tout simplement pas d'écoute sur la console par défaut. En mode débogage, il y a une console attachée, mais dans un environnement de production c'est comme vous le soupçonniez, le message ne va nulle part parce que rien n'écoute.

6
répondu Craig Tyler 2008-09-26 14:32:23

sauf si vous êtes dans une application de console stricte, Je ne l'utiliserais pas, parce que vous ne pouvez pas vraiment le voir. Je voudrais utiliser de Trace.WriteLine() pour le débogage type d'information qui peut être activée et désactivée dans la production.

4
répondu Charles Graham 2015-06-29 23:03:31

System.Diagnostics.Debug.WriteLine(...); se retrouve dans la fenêtre immédiate dans Visual Studio 2008.

Aller au menu Debug -> Windows -> Immédiate :

Enter image description here

4
répondu Nik 2015-06-29 23:12:11

l'objet TraceContext dans ASP.NET écrit au DefaultTraceListener qui sort au processus hôte sortie standard . Plutôt que d'utiliser Console.Write() , si vous utilisez Trace.Write , la production va aller à la sortie standard du processus.

vous pouvez utiliser l'objet System.Diagnostics.Process pour obtenir le ASP.NET traiter pour votre site et surveiller la sortie standard en utilisant l'événement OutputDataRecieved .

3
répondu Brian Griffin 2017-03-29 17:27:56

c'est déroutant pour tout le monde quand il s'agit de IISExpress. Il n'y a rien à lire dans les messages de la console. Ainsi, par exemple, dans les applications MVC d'ASPCORE, il configure les applications en utilisant appsettings.json qui ne fait rien si vous utilisez IISExpress.

pour le moment, vous pouvez juste ajouter loggerFactory.AddDebug (LogLevel.Debug); dans votre section Configurer et il vous montrera au moins vos logs dans la fenêtre de sortie de Debug.

bonnes nouvelles de base 2.0 ce sera tout changement: https://github.com/aspnet/Announcements/issues/255

0
répondu Chris Go 2017-08-04 23:48:54

dans un ASP.NET application, je pense qu'il va à la fenêtre de sortie ou de Console qui est visible pendant le débogage.

-1
répondu Leon Tayson 2015-06-29 23:02:57

Si vous regardez dans la fenêtre de débogage, vous verrez console.writelines.

-1
répondu 2016-08-10 22:47:12