none
¿Como puedo ver lo que Console escribe fuera del depurador de VisualStudio? (Ver lo que Console.WriteLine escribe) RRS feed

  • Pregunta

  • >Hello, World!_

    Tengo la Siguiente Pregunta:

    ¿Como puedo ver lo que Console.WriteLine escribe fuera del depurador?

    Lo que quiero ver es esto, pero fuera del depurador


    (Mi programa es un .EXE con interfaz, no es un proyecto de consola de comandos, es un formulario)

    Verlo fuera del depurador, algo así como lo que pasa con Java, que puedes ver el log de una aplicación con el CMD de windows. Lo mismo quiero hacer yo, o quizá algo parecido, no importa que guarde todo el log en un fichero de texto plano, o que muestre el log en el cmd, quiero poder ver loq que el Console.WriteLine escribe y verlo o en tiempo real o verlo luego en un fichero de texto plano.

    El porque del necesitarlo: Tengo un programita muy sabroso el cual administra imágenes de distintos formatos y sabores, lo malo es que genera muchos errores debido a que tengo un sistema FTP donde subo estas imágenes, por ello cada vez que pongo un Try Catch pongo Console.WriteLine("[NombreDelForm@NombreDelSub]Error: " & ex.message)

    Una solución a corto plazo que encontré fue, en ves de poner el Console.WriteLine fue llamar a un Sub que recogiera el error, algo como esto.

        Sub ErrorLog(ByVal ComeFrom As String, ByVal Message As String)
            Try
                My.Computer.FileSystem.WriteAllText("C:\Users\Criz\Errors.log", "[" & ComeFrom & "](" &
                                                    Format(DateAndTime.TimeOfDay, "hh") & ":" &
                                                    Format(DateAndTime.TimeOfDay, "mm") & ":" &
                                                    Format(DateAndTime.TimeOfDay, "ss") & " " &
                                                    Format(DateAndTime.TimeOfDay, "tt") & " @ " &
                                                    DateAndTime.Today &
                                                    ")Error: " &
                                                    Message & vbCrLf, True)
                Console.WriteLine(Message)
            Catch ex As Exception
                Console.WriteLine("[Debugger@ErrorLog:GenerateLogText]Error: " & ex.Message)
            End Try
        End Sub

    ahora en el try catch es

            Try
    	'Mi sistema FTP todo bello
    	Catch ex As Exception
                ErrorLog("SubidorDeImagenes", ex.Message)
            End Try

    Y eso me guarda todo error, lo malo es que en la practica todo es muuuy desordenado, y quisiera solo ver el log en tiempo real o al cerrar el programa, este me guarde todo lo que Console.WriteLine escribió en un archivo de texto.

    Y eso, estuve tratando con varios foros pero veo que es un problema.


    --- Cristopher Cáceres | Hola! | Worcome Studios ---


    • Editado ElCris009 viernes, 24 de mayo de 2019 23:38 Aclaracion
    martes, 14 de mayo de 2019 0:51

Respuestas

  • Olviden lo, ya se como hacerlo.

    Aquí el código, no soy egoísta xD

    En una Clase o Modulo (Como quieras, yo en lo personal lo puse en el mismo form xD) va el siguiente código:

    Public Class TextBoxWriter
        Inherits System.IO.TextWriter
    
        Private control As TextBoxBase
        Private Builder As StringBuilder
    
        Public Sub New(ByVal control As TextBox)
            Me.control = control
            AddHandler control.HandleCreated,
                 New EventHandler(AddressOf OnHandleCreated)
        End Sub
    
        Public Overrides Sub Write(ByVal ch As Char)
            Write(ch.ToString())
        End Sub
    
        Public Overrides Sub Write(ByVal s As String)
            If (control.IsHandleCreated) Then
                AppendText(s)
            Else
                BufferText(s)
            End If
        End Sub
    
        Public Overrides Sub WriteLine(ByVal s As String)
            Write(s + Environment.NewLine)
        End Sub
    
        Private Sub BufferText(ByVal s As String)
            If (Builder Is Nothing) Then
                Builder = New StringBuilder()
            End If
            Builder.Append(s)
        End Sub
    
        Private Sub AppendText(ByVal s As String)
            If (Builder Is Nothing = False) Then
                control.AppendText(Builder.ToString())
                Builder = Nothing
            End If
    
            control.AppendText(s)
        End Sub
    
        Private Sub OnHandleCreated(ByVal sender As Object,
              ByVal e As EventArgs)
            If (Builder Is Nothing = False) Then
                control.AppendText(Builder.ToString())
                Builder = Nothing
            End If
        End Sub
    
        Public Overrides ReadOnly Property Encoding() As System.Text.Encoding
            Get
                Return Encoding.Default
            End Get
        End Property

    En el formulario en el que se generara el log mediante Console.WriteLine() va esto

    Al cargar el Formulario (Evento Form_Load)

    Private writer As TextBoxWriter = Nothing
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            writer = New TextBoxWriter(TextBox1)
            Console.SetOut(writer)
        End Sub

    Y Listo!

    Cuando uses la función Console.WriteLine() automáticamente se copiara en tiempo real a un TextBox, un TextBox el cual puedes modificar a tu gusto, y ahora para guardar el texto que se genere en la Consola.

    Este código te ayudara a guardar el log:

    My.Computer.FileSystem.WriteAllText("C:\Users\Criz\Desktop\Log.txt", TextBox1.Text, False)
    Quiero decir que me MOLESTA mucho que los ADMINS marquen como "Respuesta" a respuestas que son incorrectas o que no están en coherencia con lo que pido.


    --- Cristopher Cáceres | Hola! | Worcome Studios ---


    • Marcado como respuesta ElCris009 jueves, 16 de mayo de 2019 0:41
    • Editado ElCris009 jueves, 16 de mayo de 2019 0:44 Me faltaba un dato importantisimo en el codigo
    jueves, 16 de mayo de 2019 0:41

Todas las respuestas

  • Hola

    en tonces ve a la carpeta de tu solucion luego a bin\debug encontraras un ejecutable  solo correlo y listo

    pero si lo quieres distribuir cambia a release y vas a la carpeta bin\release y corres el ejecutable

    • Propuesto como respuesta eRiver1 martes, 14 de mayo de 2019 17:39
    • Votado como útil ElCris009 miércoles, 15 de mayo de 2019 22:29
    martes, 14 de mayo de 2019 0:59
  • No es lo que busco. Lee bien, solo quiero una forma de ver o guardar lo que el Console.WriteLine escribe.

    --- Cristopher Cáceres | Hola! | Worcome Studios ---

    miércoles, 15 de mayo de 2019 22:29
  • Olviden lo, ya se como hacerlo.

    Aquí el código, no soy egoísta xD

    En una Clase o Modulo (Como quieras, yo en lo personal lo puse en el mismo form xD) va el siguiente código:

    Public Class TextBoxWriter
        Inherits System.IO.TextWriter
    
        Private control As TextBoxBase
        Private Builder As StringBuilder
    
        Public Sub New(ByVal control As TextBox)
            Me.control = control
            AddHandler control.HandleCreated,
                 New EventHandler(AddressOf OnHandleCreated)
        End Sub
    
        Public Overrides Sub Write(ByVal ch As Char)
            Write(ch.ToString())
        End Sub
    
        Public Overrides Sub Write(ByVal s As String)
            If (control.IsHandleCreated) Then
                AppendText(s)
            Else
                BufferText(s)
            End If
        End Sub
    
        Public Overrides Sub WriteLine(ByVal s As String)
            Write(s + Environment.NewLine)
        End Sub
    
        Private Sub BufferText(ByVal s As String)
            If (Builder Is Nothing) Then
                Builder = New StringBuilder()
            End If
            Builder.Append(s)
        End Sub
    
        Private Sub AppendText(ByVal s As String)
            If (Builder Is Nothing = False) Then
                control.AppendText(Builder.ToString())
                Builder = Nothing
            End If
    
            control.AppendText(s)
        End Sub
    
        Private Sub OnHandleCreated(ByVal sender As Object,
              ByVal e As EventArgs)
            If (Builder Is Nothing = False) Then
                control.AppendText(Builder.ToString())
                Builder = Nothing
            End If
        End Sub
    
        Public Overrides ReadOnly Property Encoding() As System.Text.Encoding
            Get
                Return Encoding.Default
            End Get
        End Property

    En el formulario en el que se generara el log mediante Console.WriteLine() va esto

    Al cargar el Formulario (Evento Form_Load)

    Private writer As TextBoxWriter = Nothing
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            writer = New TextBoxWriter(TextBox1)
            Console.SetOut(writer)
        End Sub

    Y Listo!

    Cuando uses la función Console.WriteLine() automáticamente se copiara en tiempo real a un TextBox, un TextBox el cual puedes modificar a tu gusto, y ahora para guardar el texto que se genere en la Consola.

    Este código te ayudara a guardar el log:

    My.Computer.FileSystem.WriteAllText("C:\Users\Criz\Desktop\Log.txt", TextBox1.Text, False)
    Quiero decir que me MOLESTA mucho que los ADMINS marquen como "Respuesta" a respuestas que son incorrectas o que no están en coherencia con lo que pido.


    --- Cristopher Cáceres | Hola! | Worcome Studios ---


    • Marcado como respuesta ElCris009 jueves, 16 de mayo de 2019 0:41
    • Editado ElCris009 jueves, 16 de mayo de 2019 0:44 Me faltaba un dato importantisimo en el codigo
    jueves, 16 de mayo de 2019 0:41