设置标志后跳过代码行

时间:2011-04-07 16:29:24

标签: c#

我有一个相当大的程序(C#)需要通过添加关闭日志记录的选项来扩展其功能。该程序将目录位置作为参数,存储日志。如果args [0]为空,我希望它不记录任何内容。现在,程序中有这样的行嵌套在它上面:

DiagnosticLog.WriteLine("\t\t----Verifying Plugins were installed correctly----");

我的第一个想法是在该函数中创建并检查全局标志,如果未设置则运行该行。这样我就可以避免在整个代码中围绕每条线使用相同的if语句。是否有一种更聪明的方法可以在运行期间“关闭”这些线?

6 个答案:

答案 0 :(得分:1)

如果您不想记录,可以实现一个实际上不记录任何内容的DiagnosticLog版本,并使用 it 代替您的日志版本。这是假设你知道在创建DiagnosticLog实例时是否要记录(我从你问的方式收集,你这样做)。

答案 1 :(得分:1)

为什么不直接调用一个日志函数来检查arg是否为空?

public void WriteLine(string log) {
    if (!firstArgIsEmpty) {
        // Print to file.
    }
}

答案 2 :(得分:1)

如何修改DiagnosticLog.WriteLine函数以获取具有默认值doActualLog的第二个参数booltrue)?对DiagnoticLog进行一些非常小的修改即可将此值考虑在内。然后,如果您希望实际记录是否发生,则可以决定DiagnosticLog的实例化。

答案 3 :(得分:1)

默认情况下,您只需向enabled DiagnosticLog添加true标记。如果args [0]为空,请致电DiagnosticLog.Disable()将其设为false。然后在WriteLine和任何其他日志记录功能中,在进行实际日志记录之前检查enabled

答案 4 :(得分:1)

您可以创建一个属性

public bool Log { get; set; }

string logFilePath;
public string LogFilePath
{
    get { return logFilePath; }
    set 
    {
        logFilePath = ValidateLogFilePath(value);
        Log = logFilePath.Length > 0;
    }            
}

public void WriteLine(string line)
{
    if (!Log)
        return;
    //...
}

如果您创建一个布尔属性来指示是否正在进行日志记录,那么您还可以使用它来跳过在未发生日志记录时不必要的其他代码段。如果您只是为了记录目的而构建任何长字符串,这可能很有用。

if (DiagnosticLog.Log)
{
    DiagnosticLog.WriteLine("The following plugins were not installed:\r\n\t" +
          string.Join("\r\n\t", GetMissingPluginNames()));
}

答案 5 :(得分:1)

如何将System.Diagnostics.TraceListener类与System.Diagnostics.TraceSwitch结合使用?您似乎想要的功能已经完成。