【问题标题】:Silverlight: Log4Net to Isolated StorageSilverlight:从 Log4Net 到隔离存储
【发布时间】:2011-04-10 02:02:44
【问题描述】:

首先,我知道Clog,我不想实现这块。原因?我们无法维护严格的日志记录“框架”。

所以我的问题:

是否可以在 Silverlight 应用程序中实现 log4net?我想要实现的是登录到Isolated Storage。我知道,只有 1 MB 的可用存储空间,但可以增加此限制(用户必须接受这一点,我也知道)。 顺便说一句,请不要给我提供替代品。我只想知道是否有人实施了 log4net 来隔离存储

【问题讨论】:

  • “请不要给我提供替代品” - 采取奇怪的立场!
  • @Mitch:Silverlight 的可靠本地存储——真的有任何替代隔离存储的替代方案吗?
  • @Peter:我指的是“只想知道是否有人将 log4net 用于隔离存储”
  • @Mitch,我发布了这个问题,希望我能得到一些聪明的意见。老实说,我没想到有人会用无用的 cmets 来回应。说真的,我不知道社区如何将从这些 cmets 中受益.. 好吧,至少最后我们得到了另一个帖子的链接,它确实“提供了一个替代方案”..

标签: silverlight log4net isolatedstorage


【解决方案1】:

这就是我所做的......

using System.IO.IsolatedStorage;
using System.IO;

namespace Solution.Silverlight.Classes
{
    public static class Logging
    {
        public static void Log(string message, LOGLEVEL logLevel)
        {
            try
            {
                using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (Stream stream = new IsolatedStorageFileStream("Solution.Silverlight.log", FileMode.Append, FileAccess.Write, store))
                    {
                        StreamWriter writer = new StreamWriter(stream);
                        switch (logLevel)
                        {
                            case LOGLEVEL.INFO:
                                writer.Write(String.Format("{0:u} [INFO] {1}{2}", DateTime.Now, message,Environment.NewLine));
                                break;
                            case LOGLEVEL.WARNING:
                                writer.Write(String.Format("{0:u} [WARNING] {1}{2}", DateTime.Now, message, Environment.NewLine));
                                break;
                            case LOGLEVEL.ERROR:
                                writer.Write(String.Format("{0:u} [ERROR] {1}{2}", DateTime.Now, message, Environment.NewLine));
                                break;
                            case LOGLEVEL.FATAL:
                                writer.Write(String.Format("{0:u} [FATAL] {1}{2}", DateTime.Now, message, Environment.NewLine));
                                break;
                            default:
                                break;
                        }
                        writer.Close();
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
    }
}


public enum LOGLEVEL
{
    INFO,
    WARNING,
    ERROR,
    FATAL
}

【讨论】:

  • 不需要switch语句。您可以将整个内容替换为: writer.Write(String.Format("{0:u} [{1}] {2}{3}", DateTime.Now, logLevel.ToString().ToUpper(),消息,Environment.NewLine));
  • 我不敢使用您的代码,因为我的应用程序根据连接到它的用户数量创建多个线程,它是 wp8 上的 Web 服务器实现,打开和关闭隔离存储文件可能不是一个好主意每个日志调用。
【解决方案2】:

我无法想象这是可能的。您必须下载 log4net 源代码并尝试针对 silverlight 运行时进行编译。我想可能可以调整部分代码并使其构建在 Silverlight 中,但这听起来很辛苦。您最好推出自己的解决方案,或者使用 CLog(哎呀)。

【讨论】:

    【解决方案3】:

    Microsoft Enterprise Library 5.0 的日志记录应用程序块现在可用于 Silverlight。看看Silverlight Integration Pack和对应的demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多