具有 String.Format 能力的日志记录方法

Posted

技术标签:

【中文标题】具有 String.Format 能力的日志记录方法【英文标题】:Logging Method with String.Format Capability 【发布时间】:2017-06-13 21:59:24 【问题描述】:

我有通用日志方法,可以将条目写入日志文件、事件日志等。

public static void Log(string logEntry)

    // Write DateTime and logEntry to Log File, Event Log, etc.

我使用以下方法创建了重载以提供 String.Format() 功能:

public static void Log(params object[] logEntry)

    // Purpose: Overload Log method to provide String.Format() functionality
    //          with first parameter being Format string.
    // Example: Log("[0:yyyy-MM-dd] Name: 1, Value: 2:#,##0.00", DateTime.Now, "Blah, Blah, Blah", 12345.67890)

    string formatString = logEntry[0].ToString();

    object[] values = new object[logEntry.Length - 1];

    for (int i = 1; i < logEntry.Length; i++)
    
        values[i - 1] = logEntry[i];
    

    Log(String.Format(formatString, values));

这没问题,但是有没有更好的方法来引用剩余的数组项以传递给 String.Format() 函数?还是从数组中删除元素 0 的更好方法?

我知道我也可以只使用 Log(String.Format(...,但我提供它是为了更正式的目的。

【问题讨论】:

【参考方案1】:

你可以使用

public void Log(string message, params object[] args)

或者更好的是,使用现有的框架,例如NLog 或 Log4Net,它们有类似的 API

public void Log(LogLevel level, string message, param object[] args)

public void Log(LogLevel level, Exception exception, string message, param object[] args)

【讨论】:

谢谢,有时最简单的解决方案会被忽略!【参考方案2】:

我会将参数匹配到String.Format()

public static void Log(string logEntry)

    Log(logEntry, null);


public static void Log(string logEntry, params object[] values)

   // Do whatever extra processing you need here.
   Log(String.Format(logEntry, values));

【讨论】:

以上是关于具有 String.Format 能力的日志记录方法的主要内容,如果未能解决你的问题,请参考以下文章

C#中的String.Format方法输入日志标题

String.format()的用法记录

为啥用string sql=String.Format()插入记录

C# winform 做一个日志文件,用来记录winform使用者的一些操作

条件 FormatString 或 String.Format

最全JAVA字符串格式化-String.format()的使用 [记录贴]