File

src/lib/memory-appender.model.ts

Description

An appender which stores the log messages in the browser's memory.

The MemoryAppender is enabled by default. If you do not specify anything else, it is using this configuration:

{
  "memoryAppender": [
    {
      "maxMessages": 250,
      "threshold": "ALL"
    }
}

Index

Methods

Constructor

constructor(configuration?: MemoryAppenderConfiguration)

Creates a new instance of the appender.

Parameters :
Name Type Optional Description
configuration MemoryAppenderConfiguration Yes

configuration for the appender.

Methods

Public append
append(loggingEvent: log4javascript.LoggingEvent)

Appender-specific method to append a log message.

Parameters :
Name Type Optional Description
loggingEvent log4javascript.LoggingEvent No

event to be appended.

Returns : void
Public configure
configure(configuration: MemoryAppenderConfiguration)

Configures the logging depending on the given configuration. Only the defined properties get overwritten.

Parameters :
Name Type Optional Description
configuration MemoryAppenderConfiguration No

configuration data.

Returns : void
Public getLogMessages
getLogMessages()

Gets all messages stored in memory.

Returns : LogMessage[]

stored messages

Public getMaxMessages
getMaxMessages()

Get the maximum number of messages which will be stored in memory.

Returns : number
Public removeLogMessages
removeLogMessages()

Remove all messages stored in memory.

Returns : void
Public setMaxMessages
setMaxMessages(value: number)

Set the maximum number of messages which will be stored in memory.

If the appender stores currently more messages than the new value allows, the oldest messages get removed.

Parameters :
Name Type Optional Description
value number No

new maximum number

Returns : void
Public setOnLogMessagesChangedCallback
setOnLogMessagesChangedCallback(callback: (message: LogMessage) => void)

Registers a callback which will be called every time a new message is appended. This could be useful if you want to show new messages in realtime.

Parameters :
Name Type Optional Description
callback function No

callback to be called

Returns : void
Public toString
toString()

Gets the appender's name. Mainly for unit testing purposes.

Returns : string

appender's name

import * as log4javascript from "log4javascript";

import { LogLevelConverter } from "./log-level.converter";
import { LogLevel } from "./log-level.model";
import { LogMessage } from "./log-message.model";
import { MemoryAppenderConfiguration } from "./memory-appender.configuration";

/**
 * An appender which stores the log messages in the browser's memory.
 *
 * The MemoryAppender is enabled by default.
 * If you do not specify anything else, it is using this configuration:
 *
 * ```JSON
 * {
 *   "memoryAppender": [
 *     {
 *       "maxMessages": 250,
 *       "threshold": "ALL"
 *     }
 * }
 * ```
 */
export class MemoryAppender extends log4javascript.Appender {

	private static maxMessagesDefault = 250;
	private static thresholdDefault = "ALL";

	private maxMessages: number;

	private logMessages: LogMessage[];
	private onLogMessagesChangedCallback: (message: LogMessage) => void;

	/**
	 * Creates a new instance of the appender.
	 *
	 * @param configuration configuration for the appender.
	 */
	constructor(configuration?: MemoryAppenderConfiguration) {
		super();

		this.logMessages = [];

		// process configuration
		configuration = configuration || {};
		this.configure({
			maxMessages: configuration.maxMessages || MemoryAppender.maxMessagesDefault,
			threshold: configuration.threshold || MemoryAppender.thresholdDefault,
		});

		this.maxMessages = MemoryAppender.maxMessagesDefault;
	}

	/**
	 * Configures the logging depending on the given configuration.
	 * Only the defined properties get overwritten.
	 *
	 * @param configuration configuration data.
	 */
	public configure(configuration: MemoryAppenderConfiguration): void {
		if (configuration) {
			if (configuration.maxMessages) {
				this.setMaxMessages(configuration.maxMessages);
			}
			if (configuration.threshold) {
				const convertedThreshold = LogLevelConverter.levelToLog4Javascript(
					LogLevelConverter.levelFromString(configuration.threshold));
				this.setThreshold(convertedThreshold);
			}
		}
	}

	/**
	 * Appender-specific method to append a log message.
	 *
	 * @param loggingEvent event to be appended.
	 */
	public append(loggingEvent: log4javascript.LoggingEvent): void {
		// if logMessages is already full, remove oldest element
		while (this.logMessages.length >= this.maxMessages) {
			this.logMessages.shift();
		}
		// add event to logMessages
		const message: LogMessage = {
			level: LogLevel[LogLevelConverter.levelFromLog4Javascript(loggingEvent.level)],
			logger: typeof loggingEvent.logger === "object" ? loggingEvent.logger.name : undefined,
			message: loggingEvent.messages.slice(1),
			methodName: loggingEvent.messages[0],
			timeStamp: loggingEvent.timeStamp,
		};
		this.logMessages.push(message);

		// inform about new message
		if (typeof this.onLogMessagesChangedCallback === "function") {
			this.onLogMessagesChangedCallback(message);
		}
	}

	/**
	 * Gets the appender's name.
	 * Mainly for unit testing purposes.
	 *
	 * @return appender's name
	 */
	public toString(): string {
		return "Ionic.Logging.MemoryAppender";
	}

	/**
	 * Get the maximum number of messages which will be stored in memory.
	 */
	public getMaxMessages(): number {
		return this.maxMessages;
	}

	/**
	 * Set the maximum number of messages which will be stored in memory.
	 *
	 * If the appender stores currently more messages than the new value allows, the oldest messages get removed.
	 *
	 * @param value new maximum number
	 */
	public setMaxMessages(value: number): void {
		this.maxMessages = value;

		// if there are too much logMessages for the new value, remove oldest messages
		if (this.logMessages.length > this.maxMessages) {
			this.logMessages.splice(0, this.logMessages.length - this.maxMessages);
		}
	}

	/**
	 * Gets all messages stored in memory.
	 *
	 * @return stored messages
	 */
	public getLogMessages(): LogMessage[] {
		return this.logMessages;
	}

	/**
	 * Remove all messages stored in memory.
	 */
	public removeLogMessages(): void {
		this.logMessages.splice(0);
	}

	/**
	 * Registers a callback which will be called every time a new message is appended.
	 * This could be useful if you want to show new messages in realtime.
	 *
	 * @param callback callback to be called
	 */
	public setOnLogMessagesChangedCallback(callback: (message: LogMessage) => void): void {
		this.onLogMessagesChangedCallback = callback;
	}
}

results matching ""

    No results matching ""