Silverlight:将Log4Net保存到独立存储中

3

首先,我了解 Clog,但我不想实现它。原因是?我们不能维护多个记录“框架”。

所以我的问题是:

在Silverlight应用程序中是否可以实现log4net?我想要实现的是将日志记录到隔离存储。我知道,只有1 MB的存储空间可用,但这个限制可以增加(用户必须接受此操作,我也知道)。 顺便说一下,请不要提供替代方案。我只想知道是否有人实现了log4net到隔离存储


请不要提供其他选择 - 这是一个奇怪的立场! - Mitch Wheat
1
@Mitch:使用Silverlight的某种可靠的本地存储 - 是否真的有任何替代独立存储的选择? - Peter Lillevold
@Peter:我指的是“只想知道是否有人将log4net实现到隔离存储中”。 - Mitch Wheat
类似于:http://stackoverflow.com/questions/1579260/silverlight-event-log-in-isolated-storage - Mitch Wheat
@Mitch,我发布这个问题是希望得到一些聪明的意见...老实说,我没想到会有人回复无用的评论...而且,我不知道社区如何从这些评论中受益...好吧,至少最后我们得到了一个链接到另一篇文章,它确实“提供了一种替代方案”。 - Christian Casutt
@Christian:我猜你得到了你所付出的东西的价值... - Mitch Wheat
3个回答

3

以下是我所做的事情:

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
}

6
不需要使用 switch 语句。您可以用以下代码替换整个语句:writer.Write(String.Format("{0:u} [{1}] {2}{3}", DateTime.Now, logLevel.ToString().ToUpper(), message,Environment.NewLine));该代码会输出格式化后的当前时间、日志级别以及消息,并在最后添加一个新行符。 - Mike Chamberlain
我不敢使用你的代码,因为我的应用程序根据连接到它的用户数量创建多个线程,这是一个在wp8上实现的Web服务器,每次记录调用时打开和关闭IsolatedStorage文件可能不是一个好主意。 - Mubashar

1

我无法想象这是可能的。你需要下载log4net源码,并尝试使用silverlight运行时进行编译。我想可能有可能适应部分代码并使其在silverlight中构建,但听起来是非常艰难的工作。你可能最好自己制定解决方案,或者使用CLog(糟糕的选择)。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接