0

来自脚本背景,我开始使用 c# 和 .net。我创建了一个类,该类创建一个文本文件通知一个过程已完成。我在控制台应用程序中实例化这个类并在最后调用写入过程。我要做的是在发生错误或警告时跟踪所有其他类,并在通知中反映该事件。

我已经使用公共静态布尔值实现了这一点,因此无论正在运行什么类,当发生捕获时,我都可以将布尔值更新为 true。虽然我觉得这是错误的,但我目前还没有足够的了解来找到我应该做的事情。

任何人都可以帮忙吗?代码示例:

namespace Logging
{
public class Notice
{
    public static bool HasWarning { get; set; }
    public static bool HasError { get; set; }

    public string ProcessName {get; set;}


    public enum Status
    {
        [Description("Complete Success")]
        Complete_Success,
        [Description("Complete with Warnings")]
        Complete_With_Warnings,
        [Description("Error Incomplete")]
        Error_Incomplete
    }


    public void EndProcess(Status status)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append(string.Format("{0} is Complete!", ProcessName));
        sb.Append(Environment.NewLine);
        sb.Append(Environment.NewLine);
        sb.Append(string.Format("Completion Status: {0}", ToStringEnums(status)));
        sb.Append(Environment.NewLine);
        sb.Append(string.Format("Completion Time: {0}", DateTime.Now.ToString("MM/dd/yy H:mm:ss")));

        File.WriteAllText(string.Format(@"{0}\EndProcess.txt", Directory.GetCurrentDirectory()), sb.ToString());
    }

这就是我所说的:

        private static void WriteNotice()
    {
        Notice newNotice = new Notice();
        newNotice.ProcessName = "NCOA";
        if (Notice.HasError == true)
            newNotice.EndProcess(Notice.Status.Error_Incomplete);
        else if (Notice.HasWarning == true)
            newNotice.EndProcess(Notice.Status.Complete_With_Warnings);
        else
            newNotice.EndProcess(Notice.Status.Complete_Success);

    }
4

1 回答 1

0

我建议在您的代码周围使用 Try Catch 语句并跟踪如下:

    try
        {
            //your code goes here

        }
        catch (Exception ex)
        {
            //write exception detail to output window using .Net Tracing Tools
            System.Diagnostics.Debug.WriteLine(ex.Message);
        }

对于更高级的日志记录机制,我建议使用NLOG,如下所示:

    static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
    try
    {
    //your code
    }
    catch (Exception ex)
    {
    logger.Error(ex.Message + System.Reflection.MethodBase.GetCurrentMethod());
    }
于 2012-12-18T19:11:53.450 回答