c# - 在 Metro 应用程序中实现 Logger 类

标签 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");

在这里我可以获得类名但不是方法名/行号(方法名比行号重要我可以删除行号)

最佳答案

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

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

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

你无法通过这种方式获取类名,但如果方法名和文件名的组合对你来说不够,你仍然可以按照你自己的建议获取类名。

关于c# - 在 Metro 应用程序中实现 Logger 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13716823/

相关文章:

c# - 如何在不缓冲的情况下流式传输来自 WCF 的响应?

windows-8 - 是否可以在 Windows 8 上模拟 ARM?

windows-8 - 如何在winjs中将图像大小调整为固定的高度和宽度而不丢失宽高比?

java - 使用 Jasypt 解密

multithreading - .NET 4.5 中的内存模型发生了什么变化?

asp.net - 是否可以禁用 ASP.NET 客户端感知渲染?

c# - 如何创建一个在体内使用 await 的 Task,其行为与调用 Wait 时的同步版本相同?

c# - 如何在 C# .NET 中保存密码?

c# - 我如何从 C# 运行 sql server 触发器

c# - ObjectDataProvider 可以与派生类一起使用吗?