在Metro应用程序中实现Logger类

时间:2012-12-05 05:23:21

标签: c# windows-8 .net-4.5 windows-store-apps

您好我想实现Logger类,以便我可以在日志文件(文本文件)中记录消息。

我能够将这些消息记录到文件中,但我需要更多描述,比如哪种方法称为此Log方法。 例如。

class MyClass
{
    void DoSomething()
    {
        Logger.Log("Doing my job");
    }
}

然后Log.txt文件应该包含这样的消息

Date&time:Line No. 5:MyClass:DoSomething:Doing my job

获取日期和时间以及消息很容易,但我没有办法获取方法名称/类名称/行号。

我尝试将Log方法重载为

Logger.Log(this,"your Message");

在此我可以获取类名但不能获取方法名称/行号(方法名称比行号更重要,我可以删除行号)

1 个答案:

答案 0 :(得分:4)

您正在寻找的是.NET Framework 4.5中可用的caller information attributes

void Log(string message, 
    [CallerMemberName] string memberName = "",
    [CallerFilePath] string sourceFilePath = "",
    [CallerLineNumber] int sourceLineNumber = 0) 
{
    // output the info to file
}

您仍然可以像现在一样调用Log方法,编译器将填写可选参数的值。

您无法以这种方式获取类名,但如果方法名称和文件名的组合对您来说还不够,您仍然可以获得自己已经建议的类名。