2012-02-28 19 views
1

我正在做一个应用程序,有不同的类/对象。c#从各种对象(类)写入日志

我想将所有日志消息打印到相同的Logger-Object(处理 所有文件打开/关闭)。

更要注意的是:它不是关于测井等级本身。这更多的是关于如何创建一个在我的应用程序中的所有其他对象/类中可用的singel Logging-Object。以一种有效的方式(不把我的记录器作为参数传递给所有新创建的对象)。

这样做的最佳方法是什么?

+0

检查Log4Net。 – 2GDev 2012-02-28 11:59:32

回答

1

您可以使用辛格尔顿对象为,

看到一个示例实现here

+0

就是这样。谢谢。 – Stef 2012-02-29 12:37:37

0

我想创建一个类有一个静态方法来处理所有记录。

然后这可以从任何地方调用,并给予一个类来维护。

/// <summary> 
/// Log class 
/// </summary> 
public class Log 
{ 
    /// <summary> 
    /// Writes an entry to the log 
    /// </summary> 
    /// <param name="message">The message to Write</param> 
    public static void WriteToLog(string message) 
    { 
     //Write your log code here 
    } 
} 


/// <summary> 
/// Test class 
/// </summary> 
public class Test() 
{ 
    /// <summary> 
    /// Constructor 
    /// </summary> 
    public Test() 
    { 
     Log.WriteToLog("Test constructor called"); 
    } 
} 
0

我会建议你是否使用已经existant库或写你自己的,你在一个单独的应用程序运行于主应用程序,但它可以通过自己的应用程序被启动,并发送要记录的数据。

这样做有几个原因,这不仅仅是因为实际将数据写入日志文件不会对您自己的应用程序产生如此巨大的影响,但更重要的是,您更有机会录制导致应用程序崩溃的异常,并且如果尚未完成日志记录数据,它将不会阻止应用程序关闭。

+0

out of proc在发生崩溃时不起作用。在这两种情况下,您都会在崩溃前进行日志调用。 – bryanmac 2012-02-28 12:14:49

+0

的确,尽管如果进程死亡并且文件没有正确关闭,最终可能会损坏日志文件。 – ChrisBD 2012-02-28 13:50:00

0

它完全取决于你真正想要的东西,如果它只是用于记录异常,那么我将有一个应用程序范围的异常处理程序(取决于什么类型的应用程序),然后从那里登录。不过,我认为你是后从应用的任何地方登录任何一个机制,有这样做,但如果你想推出自己的你可以这样做,许多图书馆:

public sealed class Logging 
{ 
    // Constructor is lazily called. 
    Logging() 
    { 
     //Setup reference to logging file. 
    } 

    public static Logging Instance 
    { 
     get 
     { 
      return Nested.instance; 
     } 
    } 

    /// <summary> 
    /// Writes debug information. 
    /// </summary> 
    /// <param name="text">The text to write.</param> 
    public void Debug(String text) 
    { 
     //Log to file 
    } 

    /// <summary> 
    /// Writes warning message. 
    /// </summary> 
    /// <param name="text">The message to write.</param> 
    public void Warn(String text) 
    { 
     //Log to file 
    } 

    /// <summary> 
    /// Writes error message. 
    /// </summary> 
    /// <param name="text">The message to write.</param> 
    public void Error(String text) 
    { 
     //Log to file 
    } 

    /// <summary> 
    /// Writes error message. 
    /// </summary> 
    /// <param name="text">The message to write.</param> 
    /// <param name="e">An inner exception.</param> 
    public void Error(String text, Exception e) 
    { 
     //Log to file 
    } 

    /// <summary> 
    /// Private class to hold the instance of the singleton. 
    /// </summary> 
    class Nested 
    { 
     static Nested() 
     { 

     } 

     internal static readonly Logging instance = new Logging(); 
    } 
} 

然后使用:

Logging.Instance.Debug("Hello World");