2013-07-26 3 views
1

У меня есть сервер, который закодирован в C#, мне было интересно .. Есть ли способ зарегистрировать все, что всплывает в консоли, не выходя из каждой строки, где сказано Console.WriteLine и добавить StreamWriter или что-то еще?C# log все, что написано на консоли

Я собираюсь использовать это:

*.exe > *.log 

, но я хочу, чтобы иметь возможность видеть консоль при входе .. какие-нибудь идеи?

+2

'D: \> YourApp.exe> ​​output.txt' –

ответ

0

Напишите метод, который при вызове, он вызывает как Console.WriteLine() и любой метод вы используете для входа - затем вызвать этот метод вместо Console.WriteLine()

public class Logger 
{ 
public static void WriteLine(string s) 
{ 
    Console.WriteLine(s); 
    myLogger.WriteLine(s); 
{ 
} 
+0

Это не очень помогает tbh, и это недопустимо C#. –

+0

Это фрагмент кода, предназначенный для того, чтобы дать OP идею о том, как реализовать. –

+1

но что такое 'MyLogger'?Я считаю, что ОП смотрит, как он может все регистрировать, вы заявляете «напишите метод, который вызывает все, что вы используете для регистрации», когда OP не заявил, что они уже используют существующую библиотеку ведения журнала. Кроме того, это еще недействительно C# (у вас есть недопустимые фигурные скобки). –

4

Вы можете использовать Trace писать как утешать и файл :

Trace.WriteLine("Hello"); 

Для установки как консоли и выходного файла использовать следующую при запуске приложения:

Trace.AutoFlush = true; 
Trace.Listeners.Clear(); 
Trace.Listeners.Add(new ConsoleTraceListener()); 
Trace.Listeners.Add(new TextWriterTraceListener("log.txt")); 

же может быть сконфигурированы из конфигурационного файла

<system.diagnostics> 
    <trace autoflush="true"> 
    <listeners> 
     <clear/> 
     <add name="console" type="System.Diagnostics.ConsoleTraceListener"/> 
     <add name="file" type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="log2.txt"/> 
    </listeners> 
    </trace> 
</system.diagnostics> 

Но учтите использовать некоторые рамки протоколирования линии NLog (доступной от NuGet). Я думаю, что это то, что вам нужно - вы можете написать как утешать и файлов, а также множество других задач, которые вы можете добавлять и удалять, изменив конфигурационный файл:

<targets> 
    <target xsi:type="Console" name="console" layout="${time} ${message}"/> 
    <target xsi:type="File" name="file" fileName="${basedir}/logs/log.txt"/> 
</targets> 
<rules> 
    <logger name="*" minlevel="Trace" writeTo="file,console" />  
</rules> 

Использование:

Logger logger = LogManager.GetCurrentClassLogger(); 
// after you obtained logger 
logger.Info("Hello");// message goes to all targets 
1

В осуществимость и простота этого зависит от того, как запускается ваша программа.

Если ваша программа запущена из командной строки, командного сценария или ярлыка, вы можете просто перенаправить вывод. Что-то вроде этого:

myprogram.exe > mylogfile.txt 

Если вы пишете программу, которая запускает другую программу, вы могли бы сделать то же самое, перенаправив вывод в коде. См ProcessStartInfo.RedirectStandardOutput

+0

Но мне тоже нужно показать реальную консоль, если я использую ее, она просто сохранит, но она не отобразит консоль в окне. – Donran

0

прогонов ЦМД, и выполнить свой ехе как этот

C: \ Users \ вам> C: \ Bin \ yourexecutable.exe> ​​C: \ Log \ yourexecutable.Log

+0

Но мне тоже нужно показать реальную консоль, если я использую ее, она просто сохранит, но она не отобразит консоль в окне. – Donran

+0

Я предлагаю вам направлять вывод консоли в файл журнала, например C: \ myexe.exe >> C: \ mylog.log, и написать пакетный файл, чтобы прочитать файл журнала в цикле, echo off : while cls тип c: \ mylog.log ping 10.10.10.10 -n 1 -w 10000> nul goto while –

+0

Это не эффективный способ регистрации вашей трассы. –

0

Я думаю, что вы ищете, чтобы использовать что-то вроде tee. Он предназначен для просмотра результатов консоли, а также перенаправления того же вывода в файл.

Он не поставляется с Windows, но он и другие полезные инструменты доступны по адресу http://gnuwin32.sourceforge.net. Безусловно, вы переписываете свой код. :-)

Смежные вопросы