Adding console appender to a windows form in log4net
是否可以将控制台添加到基于表单的C#应用??程序中?
目前,当我做类似
的操作时
1 | Console.WriteLine("testing"); |
它出现在VS2010的输出窗口中。
我想知道是否可以将控制台附加到我的Windows窗体应用程序中,以便输出显示在控制台中。
编辑:
看来我的第一个问题有点误导,而且没有确切说明我想要完成的工作。我刚刚使用
将控制台添加到了我的应用程序中
1 2 | [DllImport("kernel32")] static extern int AllocConsole(); |
但是我真正想要的是log4net控制台附加程序的输出显示在
该控制台没有发生。
我的附加程序的xml是
1 2 3 4 5 6 7 8 9 | <mapping> <level value="INFO" /> <foreColor value="White" /> <backColor value="Red, HighIntensity" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%class %date - %message %newline" /> </layout> </appender> |
现在我什么时候喜欢
1 | log.info("Some log"); |
它仍然不会在新添加的控制台窗口中显示。关于我该怎么做的任何建议?
只是将其扔在那里,请确保在加载log4net配置之前先
本质上是...(并且请记住执行此处未包括的所有常规错误检查)...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace SampleApp { class Program { [DllImport("kernel32.dll", SetLastError=true, CallingConvention=CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool AllocConsole(); [DllImport("kernel32.dll", SetLastError=true, CallingConvention=CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool FreeConsole(); [STAThread] private static void Main(string[] args) { // (1) Make sure we have a console to use. Program.AllocConsole(); try { // (2) Tell log4net to configure itself according to our app.config data. log4net.Config.XmlConfigurator.Configure(); // (3) Usual WinForms startup code here. Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new SampleApp.Form1()); } catch ( Exception ) { // WAT! } // (4) Remember to release the console before we exit. Program.FreeConsole(); } } } |
不能100%确定为何分配控制台的时间有所不同,但这确实为我解决了这个问题。
只需将您的项目设置为控制台应用程序,然后从控制台应用程序创建/显示表单即可,而不是相反。