我的程序会发送电子邮件。我可以选择让用户测试它是否有效。该计划有两个部分: 用户设置配置的配置窗口。它没有参数执行。 和发送消息,在控制台中执行,带有3个参数(@to,subject,message)。
我正在使用log4net。
这是代码(在我的表格中)。我正在调用相同的程序,但有3个参数:
var to = inputBox.mailValue;
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = "Mailer.exe";
processInfo.Arguments = to + " Test " + "\"This is a test message sent by Mailer.exe\"";
processInfo.UseShellExecute = false;
processInfo.RedirectStandardOutput = true;
processInfo.RedirectStandardError = true;
Process proc = Process.Start(processInfo);
proc.WaitForExit();
if(proc.ExitCode == 0)
MessageBox.Show("A test message has been sent to " + to + ".\nCheck your inbox & mailerLOG.txt file", "Message sent", MessageBoxButtons.OK, MessageBoxIcon.Information);
else if(proc.ExitCode < 0)
MessageBox.Show("An error ocurred. Check mailerLOG.txt file for more details.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
一切正常,邮件已发送,但不会记录在mailerLOG.txt
上
发送邮件时,我会这样做:
logger.Info("Message with subject <" + mail.Subject + "> has been sent to <" + mail.To + ">");
如果发生错误,它既不会记录。
我失踪了什么?
我的log4net配置。 (它在我的程序的其余部分正常工作)
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<target value="Console.Error" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="MailerLOG.txt"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="yyyyMMdd"/>
<maxSizeRollBackups value="5"/>
<maximumFileSize value="5MB"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] [%-5level]: %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO"/>
</filter>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender"/>
</root>
</log4net>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup>
</configuration>
答案 0 :(得分:2)
这段代码对我来说很突出:
if(proc.ExitCode == 0)
MessageBox.Show("A test message has been sent to " + to + ".\nCheck your inbox & mailerLOG.txt file", "Message sent", MessageBoxButtons.OK, MessageBoxIcon.Information);
else if(proc.ExitCode < 0)
MessageBox.Show("An error ocurred. Check mailerLOG.txt file for more details.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
您没有介绍proc.ExitCode > 0
的情况,这很重要,因为许多应用程序返回1作为其标准错误代码。尝试删除第二个if
,以便您的代码如下所示:
if(proc.ExitCode == 0)
MessageBox.Show("A test message has been sent to " + to + ".\nCheck your inbox & mailerLOG.txt file", "Message sent", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
MessageBox.Show("An error ocurred. Check mailerLOG.txt file for more details.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
一般来说,在记录错误时,您不想假设该程序将执行的操作。如果你需要知道什么时候出错了,最好不要猜出发生错误时会是什么样子 - 相反,检查它是否是正确的行为(这应该更容易分辨)然后有一些东西将抓住所有其他并记录它,以防万一。