# LogSilo

A lightweight logging utility for sending logs to a configured endpoint.

## Installation

Use the package manager [npm](https://www.npmjs.com/) to install Silo.

```bash
npm install logsilo
```

## Usage

### 1. Importing and Initializing Silo
To start using Silo, first import it and create an instance with your specific configuration.

```javascript
import silo, { Silo, SiloLog } from 'logsilo';

// Create an instance of Silo with your configuration
const siloInstance: Silo = silo.create({
  apiKey: 'Your Silo Backend Api Key' // The api key of the backend
  apiUrl: 'https://your-backend-api-url', // The backend endpoint for sending logs
  application: 'Your App Name',           // The name of your application
});
```
### 2. Creating a Log Entry
Once you have an instance, create individual log entries using the SiloLog class. Each log entry allows for customizable properties.

```javascript
const siloLog: SiloLog = new SiloLog({
  shortDescription: 'This is a 404 test log', // Required, brief description of the log
  detailedDescription: 'This is the longer description of the 404 test log which occurred...', // Optional, detailed description
  service: 'Your Service Which Produced The Log', // Optional, name of the service responsible
  level: 2,                                      // Optional, severity level of the log (e.g., 1 = Info, 2 = Warning, 3 = Error)
  user: 'John Doe',                              // Optional, user associated with the log
  path: '/some-super-test-route',                // Optional, route or path related to the log event
  statusCode: 404,                               // Optional, HTTP status code (if applicable)
  timestamp: new Date()                          // Optional default is new Date()
});
```
### 3. Using LogSilo
With your log entry created, you can use the following methods with your siloInstance.

```javascript
// Display the log in the console
siloInstance.console(siloLog);

// Send the log to the backend API specified in the instance's configuration
siloInstance.send(siloLog);

// Display the current configuration of the instance in the console
siloInstance.showConfig();

// Show the Silo logo in the console
siloInstance.showSiloArt();
```

## Example

```javascript
import silo, { Silo, SiloLog } from 'logsilo';

// Initialize an instance
const siloInstance: Silo = silo.create({
  apiKey: 'Your Silo Backend Api Key',
  apiUrl: 'https://your-backend-api-url',
  application: 'Example App',
});

// Create a log entry
const exampleLog: SiloLog = new SiloLog({
  shortDescription: 'Example log entry',
  detailedDescription: 'Detailed information about this log entry...',
  service: 'Example Service',
  level: 1,
  user: 'Alice Doe',
  path: '/example-path',
  statusCode: 400,
});

// Log to console and send to API
siloInstance.console(exampleLog);
try {
  const response = await siloInstance.send(exampleLog);
} catch (error) {
  console.error(error);
}

// Display config and show the logo
siloInstance.showConfig();
siloInstance.showSiloArt();
```

## Api Reference

##### create(config): Creates and returns a new Silo instance.

##### apiUrl (string): The endpoint to send logs to.

##### application (string): The application name.

##### console(log): Logs the entry to the console.

##### send(log): Sends the log to the specified API.

##### showConfig(): Displays the current instance configuration in the console.

##### showSiloArt(): Shows the Silo logo art in the console.

## License

[ISC](https://choosealicense.com/licenses/isc/)
