Привет, я Даниэль, и я хочу представить вам один из моих маленьких миньонов, которые я разработал в контексте моего нынешнего побочного проекта, Фонд глобального уровня № 1 , который является фондом акций на основе машинного обучения (ISIN DE000A2PE1D2).
Смотрите также мой другой миньон под названием «Терпеливо». Вы можете найти больше информации о терпеливо Здесь и Здесь Анкет
Я был бы так счастлив за звезду GitHub на моем репо. 😃 😍 Я очень ищу для обсуждений и комментариев. Благодарю вас!
Краткое описание
Подумайте о следующем сценарии: в вашем приложении есть несколько событий, и вы хотите, чтобы их заметили по электронной почте. Ну, если у вас есть одно уведомление, то у вас есть одно письмо. Это нормально. Но что, если у вас много уведомлений о времени выполнения, брошенные функциями, разбросанными по всему вашему приложению? Тогда вам придется собирать все эти уведомления в файл (журнал) и отправить его, когда ваше приложение будет завершено. Многие регистраторы могут записать в файлы. Но что, если вы хотите иметь хорошо отформатированную HTML -электронную почту? Тогда вы можете использовать Logmailer.:)
Где найти
logmailer @ github
logmailer @ npm
А «Почему»
В контексте бокового проекта я отвечаю за разработку и работу нескольких веб -скребков, которые работают несколько раз в день и загружают данные веб -сайта, обрабатывают их и записывают в базы данных. Поскольку это мой «боковой» проект, у меня не так много времени для мониторинга и отчетности. Но: поскольку приложения являются важной частью программного обеспечения, стоящего за фондом на основе ML, требуется высокая стабильность и прозрачность.
Если что -то пойдет не так, команда должна знать об этом. Также нам нужен отчет для выполнения приложения.
Поэтому мне нужен какой -то наблюдатель, чтобы наблюдать за выполнением приложения (задание) и уведомить нас, если есть какие -либо инциденты. Также нам нужен отчет за работу в аналитических целях.
Я разделяю эти инциденты на серьезные («ошибки») и менее серьезные инциденты («предупреждения»). Ошибки должны быть немедленно проверены «команда DevOps», которая является моей коллегой и я. Например, Если наши базы данных или веб -сервисы не работают. Предупреждения не должны быть обработаны мгновенно. Это достаточно хорошо, если они оцениваются в более поздний момент времени. Например, если одна из многих записей данных коррумпирован.
Поскольку это мой «боковой» проект, у меня не так много времени для мониторинга и отчетности. Поэтому я хочу быть уведомленным, только если есть серьезные инциденты.
Только если серьезные инциденты происходят во время работы, мой коллега И я хочу быть уведомленным непосредственно по электронной почте на наши частные адреса электронной почты. Обычный отчет и предупреждения могут быть отправлены по адресу группы.
В контексте этих сценариев можно получить следующие требования:
- Нам нужен хорошо структурированный отчет, отправленный по электронной почте нашей группе Адрес электронной почты
- Мы должны быть уведомлены по электронной почте по нашим частным адресам электронной почты, если в выполнении приложения были серьезные инциденты, в то время как электронное письмо также должно быть хорошо структурировано, чтобы наиболее важная информация могла быть получена быстро
- Отчет должен быть агрегирован из нескольких мест по всему приложению
Во время моего исследования о существующих библиотеках или пакетах я наткнулся на общих лесозаготовок, таких как Уинстон или аналогичные. Такие регистраторы могут регистрировать текст в файлы, которые затем можно отправить по электронной почте. Но это было не то, что мне было нужно. Мне нужны были хорошо отформатированы и структурированные электронные письма. Другое решение, которое я обнаружил, было отправить электронное письмо на каждую ошибку. Есть регистраторы, которые можно настроить таким образом. Но это было не то, что мне было нужно, потому что мне нужна агрегированная электронная почта и отчет.
Поэтому я решил разработать свой собственный сервис уведомлений — или лучше: logmailer Анкет
Пожалуйста, см. Ниже скриншоты некоторых примеров журнала почты.
Установка
Использование NPM:
$ npm install logmailer
Как использовать
Настройте Logmailer (изначально)
Создайте файл для создания и настройки Logmailer (например, logmailer.js). Обязательно экспортируйте сами логисты и ваши главы.
logmailer.js
let { logmailer, Recipient, Chapter, StandardChapters } = require("logmailer");
// import { logmailer, Recipient, Chapter, StandardChapters } from "logmailer";
// the order in this object is the order of the chapters in the email
let chapters = {
summary: StandardChapters.Summary,
ffOnly: new Chapter("Firefighter only", false, "DeepPink"),
managerOnly: new Chapter("Manager only", false, "DarkSlateBlue"),
errors: StandardChapters.Errors,
logs: StandardChapters.Logs
}
logmailer.create({
appName: "My App",
mailAlias: "myapp@mymail.com",
client: {
host: "smtp.googlemail.com",
user: "user",
password: "password",
ssl: true
},
recipients: [
"baerbel@gmx.de", // receives everything
// receives email if the "managerOnly" chapter is not empty
// receives only the chapter "managerOnly"
new Recipient("guenther@gmail.com", [chapters.managerOnly], [chapters.managerOnly]),
// receives email if the "ffOnly" chapter is not empty
// receives only the chapters "ffOnly" and "errors"
new Recipient("horst@web.de", [chapters.ffOnly], [chapters.summary, chapters.ffOnly, chapters.errors]),
],
chapters: chapters
})
module.exports.logmail = chapters;
module.exports.logmailer = logmailer;
Глава класса
Глава это объект единственной главы
let Chapter: new (name: string, hasCount?: boolean, color?: string) => Chapter
Параметры:
- @Param
имя— Имя главы, например «Резюме» - @Param
hascount— (Необязательно, по умолчанию неверно) установите True, если вы хотите подсчитать, как часто вы добавляете контент в главу (хорошо для ошибок или предупреждений) - @Param
Цвет— (Необязательно, по умолчанию — «черный») Используйте цвета, чтобы раскрасить заголовки (вы можете использовать HEX, RGB, RGBA, цветные коды и т. Д. но важно, чтобы почтовый клиент мог правильно отобразить цвет)
Получатель класс
Получатель один объект получателя
let Recipient: new (emailAddress: string, getsEmailOnlyIfChaptersNotEmpty?: Chapter[], canOnlySeeChapters?: Chapter[]) => Recipient
Параметры:
- @Param
Адрес электронной почты - @Param
getSemailonlyifchaptersnotempty— (Необязательно) массив глав, например [wathers.errors], получатель получит электронное письмо только в том случае, если будет не менее 1 зарегистрированной ошибки - @Param
CanonlySeeChapters— (Необязательно) массив глав, например [главы. Зарегистрированные ошибки
Используйте Logmailer
Во всех других ваших файлах вы можете просто импортировать свои главы и Logmailer и использовать их.
myapp.js
let { logmailer, logmail } = require("./logmailer");
// import { logmailer, logmail } from "./logmailer";
logmail.summary.add("Starting time", `Starting app run now: ${new Date().toISOString()}`);
// ..
logmail.errors.add("Error heading", "Info about error");
logmail.errors.add(null, "Further info about error");
logmail.errors.add(null, "Further info about error");
// ..
logmail.managerOnly.add("Info for the manager heading", "Info for the manager");
logmail.managerOnly.add(null, "Further info for the manager");
logmail.managerOnly.add(null, "Further info for the manager");
// ..
logmail.ffOnly.add("Info for the firefighter heading", "Instructions for the firefighter");
logmail.ffOnly.add(null, "Further instructions");
logmail.ffOnly.add(null, "Further instructions");
Отправить почту
logmailer.sendMail(err => {
if (err) {
console.log("error while sending", err);
} else {
console.log("mail sent successfully");
}
})
Сбросьте свои главы
logmail.errors.reset();
logmail.warnings.reset();
Формат объектов или массивов объектов как HTML столы
let object = {
"row1, col1": "row1, col2",
"row2, col1": "row2, col2",
"row3, col1": {
"row3.1, col2.1": "row3.1, col2.2",
"row3.2, col2.1": "row3.2, col2.2"
}
}
logmail.logs.add("My object as a html table", logmailer.convertObjectToHTMLTable(object));
let arrayOfObjects = [object, object];
logmail.logs.add("My object array as a html table", logmailer.convertObjectArrayToHTMLTable(arrayOfObjects));
Хорошее решение для узла JS
index.js или server.js
process.on('uncaughtException', function (err) {
logmail.errors.add("Uncaught exception", `► Error message: ${err.message}
Error stack: ${err.stack}`);
});
process.on('unhandledRejection', function (err) {
logmail.errors.add("Unhandled rejection", `► Error message: ${err.message}
Error stack: ${err.stack}`);
unplannedExit("rejection error");
})
function unplannedExit(info) {
logmail.errors.add("Unnormal exit:", `► Info: ${info}`);
logmail.summary.add("Ending time", `Ending app run now: ${new Date().toISOString()}`);
logmailer.sendMail(err => {
if (err) {
console.log("error while sending", err);
} else {
console.log("mail sent successfully");
}
process.exit();
});
}
process.on('beforeExit', function (exitCode) {
unplannedExit(exitCode);
})
process.on("SIGTERM", function (signal) {
unplannedExit(signal);
})
process.on("SIGINT", function (signal) {
unplannedExit(signal);
})
// ..
Скриншоты
Менеджеры просмотрите
Пожарные видят
Полный вид (все главы)
Лицензия
Герметичный
Оригинал: «https://dev.to/mindactuate/log-mailer-for-node-js-aggregate-your-log-error-mail-from-all-over-your-app-and-send-it-when-you-want-1oh1»