log4javascript change log
-------------------------

1.4.6 (19/3/2013)
- Added fix to handle 1223 status code from XMLHttpRequest in IE

1.4.5 (20/2/2013)
- Changed AjaxAppender to send raw data rather than URL-encoded form data when
  content-type is not "application/x-www-form-urlencoded"

- Exposed sendAllRemaining() method of AjaxAppender

1.4.4 (8/2/2013)
- Fixed issue with repeated Content-Type headers in AjaxAppender

- Improved uniqueness of PopUpAppender window name

1.4.3 (18/9/2012)
- Added addHeader() and getHeaders() methods to AjaxAppender

- Modified sendAllOnUnload feature of AjaxAppender. It now works in WebKit but
  at the expense of popping up a confirm dialog. That being the case, it is now
  disabled by default.

- Removed leaked global variable "initialized" 

- Fixed bugs #3528265, #3560924, #3560922, #2805479, #3510639 on Sourceforge
  Tracker


1.4.2 (13/10/2011)
- Fixed JsonLayout trailing comma issue. See
  http://stackoverflow.com/questions/7735382/asmx-weirdness-deserializing-json-
  blob-from-log4javascript-logging

- Fixed bugs #3401332, #3185753, #2884623, #2817213 on Sourceforge Tracker


1.4.1 (23/3/2009)
- Fixed document.domain/query string bug (#2519903 on Sourceforge Tracker)

- Added isVisible() method to PopUpAppender

- Added check for whether the console has been closed in isVisible() method of
  InPageAppender

- Included unit tests in the distribution


1.4 (30/10/2008)

- Added time() and timeEnd() methods to Logger

- Added group() and groupEnd() methods to Logger and support for displaying
  expandable groups to InPageAppender and PopUpAppender

- Added facility to layout custom fields. A custom field value may now
  optionally be a function which is passed a reference to the layout and a
  logging event and run at the time the layout's format method is called

- Added option to XmlLayout and JsonLayout to allow multiple messages to be
  formatted either as one combined message or multiple messages

- Added code to set log4javascript as a property of the window object. This
  ensures that if log4javascript is loaded via eval() (e.g. Dojo's module
  loading system), the log4javascript object is guaranteed to be available even
  though IE does not evaluate the script in the global scope

- Added useDocumentWrite parameter to constructors and isUseDocumentWrite()
  and setUseDocumentWrite() methods for InPageAppender and PopUpAppender and
  added console.html to the build so that the appender may use either the
  existing document.write method or the external HTML file to build the console.
  This is to allow support for setting document.domain in the main document,
  which is impossible with the document.write method

- Added milliseconds property to logging events and changed JsonLayout,
  XmlLayout and HttpPostDataLayout to include milliseconds by default

- Added layout parameter to AjaxAppender and a toString() method on each layout

- Setting configuration properties in appenders via constructor paramaters has
  been phased out.

- Added window.unload handler for AjaxAppender to send outstanding messages.
  Doesn't work in Opera

- Implemented log4j-style hierarchical loggers with additive appenders. For
  example, a logger called "app.stuff" has as its parent the logger called
  "app", all of whose appenders it inherits

- Changed XmlLayout and JsonLayout to send data as a key/value pair

- Bugfix for inaccessible error details

- An appender can no longer be added more than once to the same logger

- Multiple messages may now be specified in logger methods

- New conversion character 'a' added to PatternLayout. This is the same as 'm'
  except that if the first message specified is an array then it treats each
  element of the array as though it had been passed in as a message parameter

- Command line added to console windows with configurable object expansion
  depth. Command line presence and object expansion depth are configurable in
  the appender via setShowCommandLine() and setCommandLineObjectExpansionDepth()
  methods respectively

- Command line history, navigated by cursor keys and stored in a session cookie

- Firebug-inspired command line functions added: $, dir, dirxml, cd, clear,
  keys, values, expansionDepth

- Fixes for several bugs in object expansion

- Fix for bug in initialization of InPageAppender in IE 5

- Fix to allow searchable HTML in log entries

- Fix for bug which automatically displayed search next/previous buttons when
  the search box is clicked regardless of whether there were any matches

- Searches in PopUpAppender and InPageAppender now preserve formatting

- More fixes to interaction of search and severity filters in console window
  used by PopUpAppender and InPageAppender

- Added SwitchableConsoleAppender that allows flipping from an in-page console
  to a pop-up console window and back again while retaining state

- Custom events added that are raised when PopUpAppender and InPageAppender
  windows load and unload, and on the main log4javascript object when the main
  page loads, when the main page is resized and when log4javascript errors occur

- InPageAppender may now be initialized before the page loads by providing an
  element id for its container, or omitting the container altogether (in which
  case the appender is added as a fixed div at the bottom of the page)

- Tweaked PopUpAppender and InPageAppender so that the formatted log message is
  produced when append() is called rather than when the message is actually sent
  to the console window, thus allowing reliable temporary switching of layouts

- Much improved scrolling to current search match: scrolls only if part of the
  search match is not visible and centres around it rather than putting flush to
  the top left

- Removed setReadable() method from JsonLayout - now specified only in the
  constructor

- Fixed problem in IE where copying selections of log entries would produce two
  copies of each log entry


1.3.1 (20/11/2006)

- Fix to interaction of search and severity filters in console window used by
  PopUpAppender and InPageAppender


1.3 (19/10/2006)

- Fully tested and supported in IE 7 Beta 3

- Added support for FireBug logging levels in BrowserConsoleAppender

- Added optional limit to the number of log messages stored by PopUpAppender and
  InPageAppender. When this limit is reached, each new message causes the oldest
  message to be discarded.

- Exceptions passed into logging methods are now displayed in logging output.

- Added facility to pass objects as well as strings to logging methods.
  Enhanced conversion character 'm' to PatternLayout to expand object properties
  in the formatted output

- Added stack trace to error reports (alerts and log entries) in Firefox. This
  is turned off by default but can be switched on via the new
  log4javascript.setShowStackTraces function

- Added log4javascript_stub.js to distribution - this has stub versions of all
  objects and methods in log4javascript.js and can be used as a lightweight
  replacement for log4javascript.js in production systems

- Added log4javascript_compressed.js to distribution - comments and whitespace
  are removed, resulting in a 30% smaller file

- Added custom fields to layouts

- Added setReopenWhenClosed and isReopenWhenClosed methods to PopUpAppender to
  allow log4javascript to open a new pop-up console window automatically at the
  time of the next log entry after the original window was closed

- Layout.ignoresThrowable implemented to allow Layout/Appender combinations to
  decide whether to display exceptions

- Added NullLayout that performs no formatting on the logging event

- Lowered BrowserConsoleAppender's default threshold to DEBUG and set its
  default layout to NullLayout so that unformatted objects can be passed into
  FireBug

- Renamed InlineAppender to InPageAppender (though InlineAppender still works
  for the sake of backwards compatibility)

- Cosmetic changes to InPageAppender and PopUpAppender

- Added equals() method to Level

- Added removeAppender() and removeAllAppenders() methods to Logger

- Added extensive test script

- Fixed bug where Appender.setLayout and Appender.setThreshold threw an
  unhandled error if not supplied with a genuine Layout or Level respectively

- Fixed bug where InlinePopUpAppender and PopUpAppender continue to poll their
  console windows indefinitely (thus generating warnings) if the console window
  is closed before it has fully loaded

- Fixed bug in w and W symbols in SimpleDateFormat

- Fixed bug with quotes inside messages in JsonLayout

- Fixed bugs in PatternLayout with built-in DATE format and truncation modifiers

- Changed execution order of callbacks in AjaxAppender so that
  requestSuccessCallback is guaranteed to be called before the next request is
  sent

- Changed AjaxAppender so that log messages are formatted immediately before
  a request is sent rather than when append() is called, thus guaranteeing that
  changes to the layout take effect immediately

- PopUpAppender windows now have unique names per hostname to prevent clashes
  from multiple instances of log4javascript running on different servers

- Fixed error in XmlLayout's format method when passed an object

- Fixed errors in JsonLayout's handling of strings containing line breaks and/or
  double quotes


1.2 (21/6/2006)

- Tested in and added workaround for a bug in Opera 9 Beta 2 and Opera 9.0

- Tested in Konqueror 3.4 and 3.5 and added workarounds and fixes for browser
  bugs

- Added addErrorListener and removeErrorListener methods to log4javascript
  object to allow custom error handling

- Added close() method to PopUpAppender and InlineAppender

- Added test directory with an HTML page containing automated tests

- Added enable/disable logging checkbox to InlinePopUpAppender and PopUpAppender
  so that unnecessary messages (for instance, from a timer) can be ignored

- An invalid value supplied to a configuration option setter now leaves config
  property unchanged rather than reverting to the default

- Fixed bug in PopUpAppender in IE on Windows XP Service Pack 2 when accessed
  via the file system. The browser by default disables JavaScript in the pop-up
  window until the user opts to enable it, at which point they would previously
  see an uncaught error in log4javascript. Now, a proper error message is
  displayed and the appender is disabled.

- Slight alterations to toolbar in InlineAppender and PopUpAppender - text
  capitalization and title attributes added to inputs

- toString() method added to all appenders

- Correction to errors in XmlLayout's output

- Documentation corrections and additions


1.1.1 (17/5/2006)

- Fixed a minor bug with scrolling to the latest message and added "scroll to
  latest" checkbox to console window in InlineAppender and PopUpAppender


1.1 (16/5/2006)

- Added configuration option setters on Appenders and refactored to prevent
  config properties being altered directly. Several configuration options
  may not be altered after the appender has been initialized

- Added scrollToLatestMessage constructor parameter, isScrollToLatestMessage
  and setScrollToLatestMessage methods to InlineAppender and PopUpAppender

- Added isVisible method to InlineAppender

- Changed setShowOneError to setAlertAllErrors in logLog, with obvious change
  in logic

- Added layout property key configuration options to layout constructors for
  JsonLayout and HttpPostDataLayout

- Changed the default timestamp property name to "timestamp" instead of
  "timeStamp" in JsonLayout and HttpPostDataLayout

- Expanded documentation to include a section in the manual about configuring
  appenders

- Removed browser sniffing code


1.0.1 (30/4/2006)

- Option to have new log messages appear at the top added to InlineAppender and
  PopUpAppender. This option can be specified in the constructor and can also
  be toggled via a checkbox in the console window

- PopUpAppender changed to not focus the pop-up console window by default, and
  the demo page altered to create its own logger with focussing turned on,
  meaning the behaviour in the demo is essentially unchanged


1.0 (26/4/2006)

- Tweaks to default values in PopUpAppender and InlineAppender

- Bugfixes and stylistic tweaks resulting from running JSLint on
  log4javascript.js


1.0 beta 2

- Show/hide button removed from InlineAppender, replaced by show() and hide()
  methods on the InlineAppender object

- batchSeparator, batchHeader and batchFooter added to Layout and applied to
  JsonLayout - a batch of JSON log messages is now created as an array literal


1.0 beta

- TRACE level added, since this was added to log4j in 1.2.12

- PopUpAppender default settings bugfix

- getLevel method added to Logger

- Tweak to vertical alignment of checkboxes and padding of buttons in
  InlineAppender and PopUpAppender

- Fixed getDefaultLogger and getNullLogger to return loggers other than the
  root logger

0.96

- Moved console.html to inline document.writes in log4javascript.js

- Fixed getDefaultLogger to return the same object on successive calls

- Fixed scrolling issue in Opera InlineAppender and PopUpAppender

- Scrollbars are now automatic on InlineAppender and PopUpAppender, i.e. they
  only appear when required

- Fixed bug where regex searches were not applied to new log entries in
  InlineAppender and PopUpAppender

- Changed Safari font size in InlineAppender and PopUpAppender

0.95

- AjaxAppender enhancements:
	- waitForResponse added
	- timer added

- layout parameter added to all appender constructors

0.94
- First publicly available version
- IE 5 support added
- Full support for wrapping in IE added for InlineAppender and PopUpAppender