2010-10-26 2 views

ответ

4

Я не использовал NLog в Silverlight, но новая версия, 2.0, только что был выпущен в бета-версии и она может использоваться в Silverlight (есть некоторые примеры на веб-сайте). Я не видел изолированную цель хранения, но я уверен, что нетрудно написать ее.

This link shows (в ответе Кристиана) один способ «войти» в изолированное хранилище. Я не могу прокомментировать, является ли это хорошей идеей. С этой информацией вы, вероятно, могли бы написать NLog Target, который можно было бы настроить в NLog, чтобы регистраторы NLog могли писать в изолированное хранилище.

Here is another example (в ответ Chris S) регистрации в изолированном хранилище.

Наконец, NLog 2.0 поставляется с LogReceiveService и LogReceiverServiceTarget, которые, как я думаю, могут использоваться с клиентом Silverlight. Я не сделал этого, поэтому я не могу комментировать, работают ли они или как они работают.

Going примером христианина, вы могли сделать что-то вроде этого (я не пробовал):

[Target("IsolatedStorage")] 
public sealed class IsolatedStorageTarget : TargetWithLayout  
{   
    public IsolatedStorageTarget() 
    {    
    } 
    protected override void Write(LogEventInfo logEvent)   
    { 
    try 
    { 
     using (IsolatedStorageFile store = 
      IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
     using (Stream stream = new IsolatedStorageFileStream 
       ("Solution.Silverlight.log", FileMode.Append, FileAccess.Write, store)) 
     { 
      StreamWriter writer = new StreamWriter(stream); 
      writer.WriteLine(this.Layout.Render(logEvent)); 
     } 
     writer.Close(); 
     } 
    } 
    catch (Exception ex) 
    { 
    } 
    } 
} 

Некоторые вещи, которые я могу думать о том, что могло бы улучшить это являются:

Может быть это лучше сохранить поток и файл открытым до тех пор, пока объект цели жив. Возможно, это можно сделать, переопределив InitializeTarget и CloseTarget.

Возможно, было бы неплохо разрешить имя файла указываться, а не использовать жестко заданное имя файла.

Возможно, некорректная обработка ошибок. По крайней мере, обнаружив, что изолированное хранилище было исчерпано и возможно изящно (или тихо).

Если вы идете по этому маршруту, удачи! Сообщите о том, успешны вы или нет.

Смежные вопросы