В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Я собираюсь копаться в чем-то подобном сам для продукта, который мы записали. Я рассматриваю использование PostSharp для Silverlight для добавления клиентского входа как аспекта.
я использовал проект NLog с большим успехом прежде под полной Платформой.NET и Компактной Платформой, таким образом, я, скорее всего, возьму существующий код платформы и добавлю некоторые регистрирующиеся цели:
я кратко посмотрел на Помеху, и это, кажется, страдает от одного главного дефекта - это не может зарегистрировать сбой соединения. Так принятие Вашего веб-сервера онлайн все время, да это будет работать, но когда проблемы произойдут в восходящем направлении или на самом сервере, данные регистрации все потеряны и могли бы даже разрушить Ваше приложение.
Вы также можете использовать это: http://silverlightlogging.codeplex.com/
Я закончил тем, что писал новую платформу журналирования с нуля, которая обращается к этому дефекту. Я создал локальную очередь, которая получит сообщения журнала/трассировки и затем сделает фильтр и отправит их на сервер. Очередь тогда будет поддержана Изолированным устройством хранения данных поэтому, даже если клиент уйдет строка постоянно для той сессии, которую будут отправлены сообщения, когда это назад будет онлайн.
, если вы просто хотите выводить сообщения отладки на консоль. Вы можете использовать механизм console.log браузера. Я написал для этого метод расширения. Вы можете найти в моем блоге .
// http://kodierer.blogspot.com.es/2009/05/silverlight-logging-extension-method.html
public static string Log(string message)
{
var msgLog = "";
try
{
HtmlWindow window = HtmlPage.Window;
//only log if a console is available
var isConsoleAvailable = (bool)window.Eval("typeof(console) != 'undefined' && typeof(console.log) != 'undefined'");
if (!isConsoleAvailable) return "isConsoleAvailable " + isConsoleAvailable;
var createLogFunction = (bool)window.Eval("typeof(ssplog) == 'undefined'");
if (createLogFunction)
{
// Load the logging function into global scope:
string logFunction = @"function ssplog(msg) { console.log(msg); }";
string code = string.Format(@"if(window.execScript) {{ window.execScript('{0}'); }} else {{ eval.call(null, '{0}'); }}", logFunction);
window.Eval(code);
}
// Prepare the message
DateTime dateTime = DateTime.Now;
string output = string.Format("{0} - {1} - {2}", dateTime.ToString("u"), "DEBUG", message);
// Invoke the logging function:
var logger = window.Eval("ssplog") as ScriptObject;
logger.InvokeSelf(output);
}
catch (Exception ex)
{
msgLog = "Error Log " + ex.Message;
}
return msgLog;
}
Я использую окна JavaScript и делаю его доступным для сценариев в Silverlight. Для «производства» я могу отключить это окно, но все же сохранить строки журнала в памяти, а затем, если что-то пойдет не так, отправить их на сервер. Таким образом, я получаю лучшее из обоих миров - простой журнал в реальном времени на клиенте для отладки и журналы для удаленных посмертных ситуаций, с которыми могут столкнуться пользователи.
Если вы готовы на минуту снять шлем космонавта, ниже представлен легкий логгер, который я написал для Silverlight, для ведения логов на стороне клиента (в основном для использования с операциями WCF, но может быть для любых ошибок).
Первоначально он использовался в Monotouch для приложений iPhone, и был адаптирован для IsolateStorage
. При необходимости можно использовать метод Read
для отображения в текстовом поле. Проверено в SL4.
/// <summary>
/// A lightweight logging class for Silverlight.
/// </summary>
public class Log
{
/// <summary>
/// The log file to write to. Defaults to "dd-mm-yyyy.log" e.g. "13-01-2010.log"
/// </summary>
public static string LogFilename { get; set; }
/// <summary>
/// Whether to appendthe calling method to the start of the log line.
/// </summary>
public static bool UseStackFrame { get; set; }
static Log()
{
LogFilename = string.Format("{0}.log", DateTime.Today.ToString("dd-MM-yyyy"));
UseStackFrame = false;
}
/// <summary>
/// Reads the entire log file, or returns an empty string if it doesn't exist yet.
/// </summary>
/// <returns></returns>
public static string ReadLog()
{
string result = "";
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForSite();
if (storage.FileExists(LogFilename))
{
try
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(LogFilename,FileMode.OpenOrCreate,storage))
{
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
}
}
catch (IOException)
{
// Ignore
}
}
return result;
}
/// <summary>
/// Writes information (not errors) to the log file.
/// </summary>
/// <param name="format">A format string</param>
/// <param name="args">Any arguments for the format string.</param>
public static void Info(string format, params object[] args)
{
WriteLine(LoggingLevel.Info, format, args);
}
/// <summary>
/// Writes a warning (non critical error) to the log file
/// </summary>
/// <param name="format">A format string</param>
/// <param name="args">Any arguments for the format string.</param>
public static void Warn(string format, params object[] args)
{
WriteLine(LoggingLevel.Warn, format, args);
}
/// <summary>
/// Writes a critical or fatal error to the log file.
/// </summary>
/// <param name="format">A format string</param>
/// <param name="args">Any arguments for the format string.</param>
public static void Fatal(string format, params object[] args)
{
WriteLine(LoggingLevel.Fatal, format, args);
}
/// <summary>
/// Writes the args to the default logging output using the format provided.
/// </summary>
public static void WriteLine(LoggingLevel level, string format, params object[] args)
{
string message = string.Format(format, args);
// Optionally show the calling method
if (UseStackFrame)
{
var name = new StackFrame(2, false).GetMethod().Name;
string prefix = string.Format("[{0} - {1}] ", level, name);
message = string.Format(prefix + format, args);
}
Debug.WriteLine(message);
WriteToFile(message);
}
/// <summary>
/// Writes a line to the current log file.
/// </summary>
/// <param name="message"></param>
private static void WriteToFile(string message)
{
try
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForSite();
bool b = storage.FileExists(LogFilename);
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(LogFilename,FileMode.Append,storage))
{
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("[{0}] {1}", DateTime.UtcNow.ToString(), message);
}
}
}
catch (IOException)
{
// throw new Catch22Exception();
}
}
}
/// <summary>
/// The type of error to log.
/// </summary>
public enum LoggingLevel
{
/// <summary>
/// A message containing information only.
/// </summary>
Info,
/// <summary>
/// A non-critical warning error message.
/// </summary>
Warn,
/// <summary>
/// A fatal error message.
/// </summary>
Fatal
}