Я использую NLog Libary (http://nlog-project.org/) в своих С# Win Forms для ведения журнала. У кого-нибудь есть опыт, если можно написать Logfile в "Изолированный инвентарь" с помощью этого NLogger?
Ответы спасибо 4
Я использую NLog Libary (http://nlog-project.org/) в своих С# Win Forms для ведения журнала. У кого-нибудь есть опыт, если можно написать Logfile в "Изолированный инвентарь" с помощью этого NLogger?
Ответы спасибо 4
Я не использовал NLog в Silverlight, но новая версия 2.0 только что была выпущена в бета-версию, и ее можно использовать в Silverlight (на веб-сайте есть несколько примеров). Я не видел изолированную цель хранения, но я уверен, что нетрудно написать ее.
Эта ссылка показывает (в христианском ответе) один из способов "войти" в изолированное хранилище. Я не могу прокомментировать, является ли это хорошей идеей. С этой информацией вы, вероятно, могли бы написать NLog Target, который можно было бы настроить в NLog, чтобы регистраторы NLog могли писать в изолированное хранилище.
Вот еще один пример (в ответе Криса S) о регистрации в изолированном хранилище.
Наконец, NLog 2.0 поставляется с LogReceiveService и LogReceiverServiceTarget, которые, как я думаю, можно использовать для клиента Silverlight. Я не сделал этого, поэтому я не могу комментировать, работают ли они или как они работают.
Идя по христианскому примеру, вы могли бы сделать что-то вроде этого (я этого не пробовал):
[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.
Возможно, было бы неплохо разрешить имя файла указываться, а не использовать hardcoded filename.
Некоторая обработка ошибок может быть полезна. По крайней мере, обнаружив, что изолированное хранилище было исчерпано и возможно изящно (или тихо).
Если вы идете по этому маршруту, удачи! Сообщите о том, успешны вы или нет.