Логрус интерьер жалюзи: Логрус Интерьер, торгово-производственная компания, Москва, Долгоруковская, 29 ст1

ЛОГРУС ИНТЕРЬЕР ООО — Москва и Московская область

Адрес:
Москва, Долгоруковская ул., д. 29, стр. 1
(ближайшее метро — Новослободская ~370 м)

Телефон:
  • +7 (495) 2589957


  • Факс:
  • +7 (495) 2589957


  • Сайт:
    http://www.jaluze.ru
    Описание:
    Жалюзи на пластиковые окна, рулонные жалюзи, вертикальные жалюзи, горизонтальные жалюзи и защитные жалюзи | Логрус Интерьер

    Рубрики:
    • Двери, ворота, шлагбаумы автоматические
    • Жалюзи
    • Шторы, занавеси, карнизы

    О компании:

    Редактировать описание


    Отзывы о компании ЛОГРУС ИНТЕРЬЕР ООО

    Не опубликовано ни одного отзыва. Добавьте свой отзыв о компании!

    Добавить отзыв

    В рубрике «Двери, ворота, шлагбаумы автоматические» также находятся следующие организации:
    AURA KOMFORT/АУРА КОМФОРТ

    Адрес: Москва, Вавилова ул., д. 31, оф. 12
    BESTROL.RU

    Адрес: Москва, Стахановская ул., д. 20, корп. 11, оф. 1
    DITEC

    Адрес: Москва, Годовикова ул., д. 9
    GEZE

    Адрес: Москва, Колодезный пер., д. 3, стр. 25
    РВА-Групп ООО

    Адрес: 107078, Москва, Новая Басманная, д. 23, стр. 1а, оф. 23
    ROL24

    Адрес: Москва
    SCHANZ

    Адрес: Москва, Уржумская ул., д. 4
    STAVNY.RU

    Адрес: Москва, Литовский бул., д. 19
    SWISS AUTOMATIC SYSTEMS

    Адрес: Москва, Мытищинская 3-я ул. , д. 3
    АБСОЛЮТ ПРЕМИУМ

    Адрес: Москва, Скотопрогонная ул., д. 35, стр. 2, оф. 303
    АВГТрейд

    Адрес: Москва, Молодогвардейская ул., д. 7
    АКТИВСТРОЙКОМПЛЕКТ ООО

    Адрес: Москва, Тихорецкий бул., д. 1, ТК Люблинское поле
    АЛЮМ СТРУКТУРАЛ ПРОДУКТ ООО

    Адрес: Москва, Котляковская ул., д. 4
    АЛЮФАРМ ООО

    Адрес: Москва, Садовническая наб., д. 41
    АРКОР

    Адрес: Москва, Чонгарский бул., д. 4/2
    В рубрике «Жалюзи» также находятся следующие организации:
    АРТЛАЙН

    Адрес: Зеленоград г., 4806-й пр., д. 4, стр. 1, Южная Промзона
    РАМКА

    Адрес: Зеленоград г., Западный 3-й пр., д. 8, стр. 1
    СОВРЕМЕННЫЙ ДИЗАЙН ООО

    Адрес: Зеленоград г. , корп. 1201
    СТРОЙРАРИТЕТ ООО

    Адрес: Зеленоград г., корп. 1824
    ГЕРАТ ООО

    Адрес: Железнодорожный г., Маяковского ул., стр. 3А
    АНИКО ООО

    Адрес: Серпухов г., Горького ул., д. 1А
    УГРЕШСКИЕ ОКНА ООО

    Адрес: Дзержинский г., Лесная ул., д. 17А
    ВЕКТОР-МК

    Адрес: Люберцы г., Октябрьский просп., д. 112
    Shadow

    Адрес: Москва, Нижегородская ул., д. 32, стр. 6
    VALERY DESIGN

    Адрес: Москва, Пресненский Вал ул., д. 26
    АБСОЛЮТ ПРЕМИУМ

    Адрес: Москва, Скотопрогонная ул., д. 35, стр. 2, оф. 303
    АВАНГАРД ООО

    Адрес: Москва, Мячковский бул., д. 6, стр. 1
    АВАНГАРД СТРОЙКОМПЛЕКТ

    Адрес: Москва, Стрельбищенский пер. , д. 18А
    АВТОДРОМ-96 ООО

    Адрес: Москва, Балаклавский просп., д. 5
    АКВОЛАЙН ООО

    Адрес: Москва, Островитянова ул., д. 9
    АКЦЕНТ ЛТД.

    Адрес: Москва, Почтовая Б. ул., д. 38
    В рубрике «Шторы, занавеси, карнизы» также находятся следующие организации:
    Chataeu-dor — элитные шторы на заказ

    Адрес: 120100, Москва, ул. Рочдельская, д. 15
    ELECBLIND

    Адрес: Москва, Дворникова ул., д. 7
    Paleevelur — шторы премиум на заказ

    Адрес: 120100, Москва, ул. Рочдельская, д. 15
    REDSUN

    Адрес: Москва, Черемушкинская Б. ул., д. 23
    ROLLITE

    Адрес: Москва
    БИЗНЕС-ПАРТНЕР ООО

    Адрес: Москва, Советской Армии ул. , д. 2, оф. 8
    ВИЗАЛЬ ООО

    Адрес: Москва, Фрезерная 2-я ул., д. 14, оф. 103
    ВИНДГЕЙТ

    Адрес: Москва, Боровая ул., д. 7, стр. 1
    Кисея ООО

    Адрес: 107023, Москва, Бол.Семеновская, д. 10, м. Электрозаводская, 100м, эт. 2
    КЛЮШКА

    Адрес: Москва, Дубнинская ул., д. 75

    Популярная компания из рубрики Двери, ворота, шлагбаумы автоматические:

    ДОРХАН КОМПАНИЯ Одинцово

    Логрус Интерьер, отзывы, вид деятельности и телефон в Москве

    на ул. Долгоруковская, 29 в Москве

    О компании


    Компания работает по графику Пн-Пт 09:00-19:00 (подробнее), расположена на ул. . Торгово-производственная компания «Логрус Интерьер» специализируется на карнизах. На сайте есть дополнительная информация.

    Режим работы



    ПнВтСрЧтПтСбВс
    09:00-19:0009:00-19:0009:00-19:0009:00-19:0009:00-19:00ВыходнойВыходной


    Сейчас в Москве — 17:23,
    «Торгово-производственная компания Логрус Интерьер» закрыт .

    Способы оплаты


    Оплата через банк, Расчет по картам

    Похожие компании рядом

    229 м

    Панорама О.С. на карте Москвы

    486 м

    Окна Garant торгово-монтажная компания, телефон

    1087 м

    Дивные окна торгово-монтажная компания, адрес и телефон

    1481 м

    Маркиза-1 салон-ателье, как доехать

    1635 м

    Sun Protection Systems торгово-производственная компания в Москве, телефон

    1681 м

    Русокон в Москве, отзывы

    1757 м

    Эра Жалюзи, отзывы о компании

    1963 м

    Декор М торгово-производственная компания, как доехать

    1972 м

    Flemingo, отзывы о компании

    1997 м

    Салон штор в Москве


    Еще 5 компаний вы можете найти, открыв весь список.

    logrus package — github.com/sirupsen/logrus — Go Packages

    Logrus

    Logrus — это структурированный логгер для Go (golang), полностью совместимый с API
    стандартный библиотечный регистратор.

    Логрус находится в режиме обслуживания. Мы не будем вводить новые функции. Его
    просто слишком сложно сделать таким образом, чтобы не сломать проекты многих людей, что
    последнее, что вам нужно от вашей библиотеки журналов (опять же…).

    Это не означает, что Логрус мертв. Logrus будет поддерживаться в течение
    безопасность, (обратно совместимые) исправления ошибок и производительность (где мы
    ограничено интерфейсом).

    Я считаю, что самый большой вклад Логруса в том, что он сыграл свою роль в сегодняшнем
    широкое использование структурированного логирования в Golang. Кажется, нет
    причина сделать мажорную итерацию в Logrus V2, так как фантастический Go
    сообщество построило их самостоятельно. Появилось много фантастических альтернатив
    вверх. Логрус выглядел бы так же, если бы он был переработан с учетом того, что мы знаем.
    о структурированном ведении журналов в Go сегодня. Посмотрите, например,
    Зеролог, Зап и Апекс.

    Заметили странные проблемы с регистрозависимостью? Раньше можно было
    импортировать Logrus как в верхнем, так и в нижнем регистре. Благодаря среде пакета Go,
    это вызвало проблемы в сообществе, и нам нужен был стандарт. Некоторые среды
    возникли проблемы с вариантом в верхнем регистре, поэтому было решено использовать нижний регистр.
    Все, что использует logrus , должно будет использовать нижний регистр:
    github.com/sirupsen/logrus . Любой пакет, которого нет, должен быть изменен.

    Чтобы исправить скольжение, см.
    Комментарии.
    Подробное объяснение проблемы с корпусом см.
    комментарий.

    Красивое цветовое кодирование в процессе разработки (когда подключен телетайп, в противном случае просто
    обычный текст):

    С log.SetFormatter(&log. JSONFormatter{}) , для удобного анализа с помощью logstash
    или Splunk:

     {"животное":"морж","уровень":"информация","msg":"Группа моржей выходит из
    океан","размер":10,"время":"2014-03-10 19:57:38.562264131 -04:00 EDT"}
    {"level":"warning","msg":"Число группы сильно увеличилось!",
    «число»: 122, «омг»: правда, «время»: «2014-03-10 19:57:38.562471297 -04:00 по восточноевропейскому времени"}
    {"животное":"морж","уровень":"информация","msg":"Появляется гигантский морж!",
    «размер»: 10, «время»: «2014-03-10 19:57:38.562500591 -04:00 по восточному поясному времени»}
    {"животное":"морж","уровень":"информация","msg":"Огромная корова выходит в океан.",
    «размер»: 9, «время»: «2014-03-10 19:57:38.562527896 -04:00 по восточному поясному времени»}
    {"level":"fatal","msg":"Лед треснет!","число":100,"omg":true,
    "время": "2014-03-10 19:57:38.562543128 -04:00 по восточному поясному времени"}
     

    По умолчанию log.SetFormatter(&log.TextFormatter{}) , если TTY не
    подключен, выход совместим с
    формат логфмт:

     time="2015-03-26T01:27:38-04:00" level=debug msg="Начали наблюдения за пляжем" animal=worrus number=8
    time="2015-03-26T01:27:38-04:00" level=info msg="Группа моржей выходит из океана" animal=walrus size=10
    time="2015-03-26T01:27:38-04:00" level=warning msg="Число группы значительно увеличилось!" число=122 боже мой=правда
    time="2015-03-26T01:27:38-04:00" level=debug msg="Изменения температуры" temperature=-4
    time="2015-03-26T01:27:38-04:00" level=panic msg="Это более 9000!" животное=косатка размер=9009
    time="2015-03-26T01:27:38-04:00" level=fatal msg="Лед треснул!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38. 441574009 -0400 Паника по восточному поясному времени. Их больше 9000!} number=100 omg=true
     

    Чтобы обеспечить такое поведение, даже если TTY подключен, установите форматтер следующим образом:

     log.SetFormatter(&log.TextFormatter{
    DisableColors: правда,
    FullTimestamp: правда,
    })
     
    Имя метода регистрации

    Если вы хотите добавить вызывающий метод в виде поля, отправьте команду регистратору через:

     лог.SetReportCaller(true)
     

    Это добавляет вызывающего абонента как «метод», например:

     {«животное»: «пингвин», «уровень»: «фатальный», «метод»: «github.com/sirupsen/arcticcreatures.migrate», «msg ":"пингвин проплывает мимо",
    "время": "2014-03-10 19:57:38.562543129 -04:00 по восточному поясному времени"}
     
     time="2015-03-26T01:27:38-04:00" level=fatal method=github.com/sirupsen/arcticcreatures.migrate msg="проплывает пингвин" animal=penguin
     

    Обратите внимание, что это добавляет измеримые накладные расходы — стоимость будет зависеть от версии Go, но
    от 20 до 40% в недавних тестах с 1. 6 и 1.7. Вы можете подтвердить это в своем
    среда через тесты:

     пройти тест -bench=.*CallerTracing
     
    С учетом регистра

    Название организации было изменено на нижний регистр — и это не будет изменено
    назад. Если вы получаете конфликты импорта из-за чувствительности к регистру, используйте
    импорт в нижнем регистре: github.com/sirupsen/logrus .

    Пример

    Самый простой способ использования Logrus — это просто экспортированный логгер на уровне пакета:

     package main
    Импортировать (
      журнал "github.com/sirupsen/logrus"
    )
    основная функция () {
      log.WithFields(log.Fields{
        "животное": "морж",
      }).Info("Появился морж")
    }
     

    Обратите внимание, что он полностью совместим с API с регистратором stdlib, так что вы можете
    замените импорт log везде на log "github.com/sirupsen/logrus"
    и теперь у вас будет гибкость Logrus. Вы можете настроить все, что вам
    хочу:

     основной пакет
    Импортировать (
      "Операционные системы"
      журнал "github. com/sirupsen/logrus"
    )
    функция инициализации () {
      // Журнал в формате JSON вместо формата ASCII по умолчанию.
      log.SetFormatter(&log.JSONFormatter{})
      // Вывод на стандартный вывод вместо стандартного стандартного stderr
      // Может быть любым io.Writer, пример файла см. ниже
      log.SetOutput(os.Stdout)
      // Записывать только серьезность предупреждения или выше.
      log.SetLevel(log.WarnLevel)
    }
    основная функция () {
      log.WithFields(log.Fields{
        "животное": "морж",
        "размер": 10,
      }).Info("Группа моржей выходит из океана")
      log.WithFields(log.Fields{
        "омг": правда,
        "число": 122,
      }).Warn("Число группы сильно увеличилось!")
      log.WithFields(log.Fields{
        "омг": правда,
        "число": 100,
      }).Fatal("Лед тронулся!")
      // Распространенным шаблоном является повторное использование полей между операторами регистрации путем повторного использования
      // logrus.Entry, возвращенный из WithFields()
      contextLogger := log.WithFields(log.Fields{
        "common": "это общее поле",
        "other": "Я тоже всегда должен авторизоваться",
      })
      contextLogger. Info("Я буду зарегистрирован с общим и другим полем")
      contextLogger.Info("Я тоже")
    }
     

    Для более продвинутого использования, например для ведения журнала в нескольких местах из одного
    приложение, вы также можете создать экземпляр пакета logrus Logger:

     main
    Импортировать (
      "Операционные системы"
      "github.com/sirupsen/logrus"
    )
    // Создаем новый экземпляр логгера. У вас может быть любое количество экземпляров.
    var log = logrus.New()
    основная функция () {
      // API для установки атрибутов немного отличается от уровня пакета
      // экспортированный регистратор. См. Годок.
      log.Out = os.Stdout
      // Вы можете установить любой `io.Writer`, например, файл
      // файл, ошибка := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
      // если ошибка == ноль {
      // log.Out = файл
      // } еще {
      // log.Info("Не удалось войти в файл, используя stderr по умолчанию")
      // }
      log.WithFields(logrus.Fields{
        "животное": "морж",
        "размер": 10,
      }). Info("Группа моржей выходит из океана")
    }
     
    Поля

    Логрус поощряет тщательную, структурированную регистрацию через поля регистрации вместо
    длинные, неразборчивые сообщения об ошибках. Например, вместо: log.Fatalf("Не удалось отправить событие %s в тему %s с ключом %d") , вы должны регистрировать гораздо больше
    обнаруживаемый:

     log.WithFields(log.Fields{
      "событие": событие,
      "тема": тема,
      "ключ": ключ,
    }).Fatal("Не удалось отправить событие")
     

    Мы обнаружили, что этот API заставляет вас думать о ведении журнала таким образом, чтобы
    гораздо больше полезных сообщений регистрации. Мы были в бесчисленных ситуациях, когда просто
    одно добавленное поле в оператор журнала, которое уже было там, спасло бы нас
    часы. Вызов WithFields необязателен.

    В общем случае с Логрусом при использовании любой из функций printf -семейства следует
    рассматривается как подсказка, вы должны добавить поле, однако вы все равно можете использовать
    printf — семейные функции с Логрусом.

    Поля по умолчанию

    Часто полезно иметь поля всегда прикрепленными к операторам журнала в
    приложения или его частей. Например, вы можете захотеть всегда регистрировать
    request_id и user_ip в контексте запроса. Вместо того, чтобы писать
    log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip}) на
    каждую строку, вы можете создать logrus.Entry вместо этого:

     requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
    requestLogger.Info("что-то произошло с этим запросом") # будет регистрировать request_id и user_ip
    requestLogger.Warn("произошло что-то нехорошее")
     
    Хуки

    Вы можете добавить хуки для уровней логирования. Например, чтобы отправить ошибки в исключение
    служба отслеживания на Ошибка , Fatal и Panic , информация в StatsD или авторизация
    несколько мест одновременно, например. системный журнал.

    Логрус поставляется со встроенными крючками. Добавьте их или свой собственный хук в
    инициализация :

     импорт (
      журнал "github.com/sirupsen/logrus"
      "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // пакет называется "airbrake"
      logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
      "журнал/системный журнал"
    )
    функция инициализации () {
      // Используйте хук Airbrake, чтобы сообщать об ошибках с серьезностью Ошибка или выше, чтобы
      // трекер исключений. Вы можете создавать собственные хуки, см. раздел Хуки.
      log.AddHook(airbrake.NewHook(123, "xyz", "производство"))
      ловушка, ошибка := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
      если ошибка != ноль {
        log.Error("Невозможно подключиться к локальному демону системного журнала")
      } еще {
        log.AddHook(крючок)
      }
    }
     

    Примечание. Перехватчик системного журнала также поддерживает подключение к локальному системному журналу (например, «/dev/log» или «/var/run/syslog» или «/var/run/log»). Для получения подробной информации, пожалуйста, проверьте README обработчика системного журнала.

    Список известных в настоящее время сервисных хуков можно найти на этой вики-странице.

     log.Trace("Что-то очень низкого уровня")
    log.Debug("Полезная отладочная информация")
    log.Info("Произошло нечто примечательное!")
    log.Warn("Возможно, вам следует взглянуть на это.")
    log.Error("Что-то не удалось, но я не ухожу.")
    // Вызывает os.Exit(1) после регистрации
    log.Fatal("До свидания")
    // Вызывает panic() после регистрации
    log.Panic("Я сдаюсь.")
     

    Вы можете установить уровень ведения журнала на Logger , тогда он будет регистрировать только записи с
    эта серьезность или что-то выше этого:

     // Будет регистрировать все, что является информацией или выше (предупреждение, ошибка, фатальная ошибка, паника). По умолчанию.
    log.SetLevel(log.InfoLevel)
     

    Может быть полезно установить log.Level = logrus.DebugLevel в отладке или подробном
    окружение, если оно есть в вашем приложении.

    Записи

    Помимо полей, добавленных с помощью WithField или WithFields некоторые поля
    автоматически добавляется ко всем событиям регистрации:

    1. время . Отметка времени создания записи.
    2. сообщение . Сообщение журнала передано на {Info,Warn,Error,Fatal,Panic} после
      вызов AddFields . Например. Не удалось отправить событие.
    3. уровень . Уровень ведения журнала. Например. информация .
    Окружающая среда

    Логрус не имеет понятия об окружающей среде.

    Если вы хотите, чтобы перехватчики и средства форматирования использовались только в определенных средах,
    ты должен справиться с этим сам. Например, если ваше приложение имеет глобальный
    переменная Environment , которая является строковым представлением среды, которую вы
    можно сделать:

     импорт (
      журнал "github. com/sirupsen/logrus"
    )
    функция инициализации () {
      // сделать что-то здесь, чтобы установить окружение в зависимости от переменной окружения
      // или флаг командной строки
      если среда == "производство" {
        log.SetFormatter(&log.JSONFormatter{})
      } еще {
        // TextFormatter используется по умолчанию, вам не нужно этого делать.
        log.SetFormatter(&log.TextFormatter{})
      }
    }
     

    Эта конфигурация предназначена для использования logrus , но JSON в
    производство в основном полезно только в том случае, если вы выполняете агрегацию журналов с помощью таких инструментов, как
    Splunk или Logstash.

    Форматтеры

    Встроенные форматеры журналов:

    • logrus.TextFormatter . Регистрирует событие в цветах, если stdout является tty, в противном случае
      без цветов.

      • Примечание. для принудительного цветного вывода при отсутствии TTY установите ForceColors
        поле до верно . Чтобы запретить цветной вывод даже при наличии телетайпа, установите
        DisableColors поле true . Для Windows см.
        github.com/mattn/go-colorable.
      • Когда цвета включены, уровни по умолчанию усекаются до 4 символов. Отключить
        truncation установите для поля DisableLevelTruncation значение true .
      • При выводе на TTY часто полезно визуально просмотреть столбец, в котором все уровни имеют одинаковую ширину. Настройка PadLevelText Поле to true включает это поведение, добавляя отступы к тексту уровня.
      • Все параметры перечислены в сгенерированных документах.
    • logrus.JSONFormatter . Записывает поля в формате JSON.
      • Все параметры перечислены в сгенерированных документах.

    Сторонние средства форматирования журналов:

    • FluentdFormatter . Форматирует записи, которые могут анализироваться Kubernetes и Google Container Engine.
    • ГЕЛЬФ . Форматирует записи, чтобы они соответствовали спецификации Graylog GELF 1. 1.
    • логсташ . Записывает поля как Logstash Events.
    • с префиксом . Отображает источник записи журнала вместе с альтернативным макетом.
    • залго . Вызов Силы Залго.
    • вложенный-logrus-formatter . Преобразует поля logrus во вложенную структуру.
    • мощный-logrus-formatter . получить имя файла, номер строки журнала и имя последней функции при печати журнала; Лог сава в файлы.
    • заголовок-json-formatter . Форматировщик сообщений logrus в формате json с добавлением удобочитаемой подписи.

    Вы можете определить форматтер, внедрив интерфейс Formatter ,
    требуется метод Format . Формат принимает *Entry . Запись . Данные — это
    Поля типа ( map[string]interface{} ) со всеми вашими полями, а также
    по умолчанию (см. раздел «Записи» выше):

     type MyJSONFormatter struct {
    }
    log. SetFormatter (новый (MyJSONFormatter))
    func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) {
      // Обратите внимание, что это не включает время, уровень и сообщение, которые доступны на
      // Вход. Обратитесь к `godoc` за информацией об этих полях или прочтите
      // источник официальных логгеров.
      сериализовано, ошибка: = json.Marshal(entry.Data)
        если ошибка != ноль {
          return nil, fmt.Errorf("Не удалось маршалировать поля в JSON, %w", ошибка)
        }
      return append(сериализованный, '\n'), ноль
    }
     
    Регистратор как

    io.Writer

    Логрус может трансформироваться в io.Writer . Этот писатель является концом io.Pipe , и вы несете ответственность за его закрытие.

     w := logger.Writer()
    отложить w.Close()
    срв := http.Сервер{
        // создаем stdlib log.Logger, который пишет в
        // логрус.Логгер.
        ErrorLog: log.New(w, "", 0),
    }
     

    Каждая строка, записанная в этот модуль записи, будет напечатана обычным способом с использованием средств форматирования.
    и крючки. Уровень для этих записей информация .

    Это означает, что мы можем легко переопределить стандартный библиотечный регистратор:

     logger := logrus.New()
    logger.Formatter = &logrus.JSONFormatter{}
    // Использовать logrus для стандартного вывода журнала
    // Обратите внимание, что `log` здесь ссылается на журнал stdlib
    // Не логрус импортируется под именем `log`.
    log.SetOutput(logger.Writer())
     
    Ротация

    Ротация логов в Логрусе не предусмотрена. Ротация журналов должна выполняться
    внешняя программа (например, logrotate(8) ), которая может сжимать и удалять старый журнал
    записи. Это не должно быть функцией регистратора уровня приложения.

    Инструменты
    Инструмент Описание
    Логрус Мате Logrus mate — это инструмент для Logrus для управления логгерами, вы можете инициализировать уровень логгера, перехватывать и форматировать файл конфигурации, логгер будет генерироваться с разными конфигурациями в разных средах.
    Помощник Логрус Вайпер Помощник вокруг Логруса для обертывания spf13/Viper для загрузки конфигурации с клыками! А для упрощения настройки Логруса используйте поведение Logrus Mate. образец
    Тестирование

    В Логрус встроено средство подтверждения наличия сообщений журнала. Это реализовано с помощью хука test и предоставляет:

    • декораторы для существующего регистратора ( test.NewLocal и test.NewGlobal ), который в основном просто добавляет test хук
    • тестовый регистратор ( test.NewNullLogger ), который просто записывает сообщения журнала (и не выводит их):
     импорт(
      "github.com/sirupsen/logrus"
      "github.com/sirupsen/logrus/хуки/тест"
      "github.com/stretchr/testify/assert"
      "тестирование"
    )
    функция TestSomething(t*testing.T){
      регистратор, ловушка: = test.NewNullLogger()
      logger.Error("Helloerror")
      assert. Equal(t, 1, len(hook.Entries))
      assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level)
      assert.Equal(t, "Helloerror", hook.LastEntry().Message)
      крюк.Сброс()
      assert.Nil(t, крючок.LastEntry())
    }
     
    Фатальные обработчики

    Логрус может прописать одну или несколько функций, которые будут вызываться при любых фатальный
    сообщение об уровне регистрируется. Зарегистрированные обработчики будут выполняться до
    logrus выполняет os.Exit(1) . Такое поведение может быть полезным, если вызывающим абонентам нужно
    чтобы изящно завершить работу. В отличие от паники ("Что-то пошло не так...") вызов , который можно перехватить с помощью отложенного восстановления , вызов os.Exit(1) не может быть перехвачен.

     ...
    обработчик: = функция () {
      // изящно отключаем что-то...
    }
    logrus.RegisterExitHandler(обработчик)
    ...
     
    Безопасность потоков

    По умолчанию Logger защищен мьютексом для одновременной записи. Мьютекс удерживается при вызове хуков и записи логов.
    Если вы уверены, что такая блокировка не нужна, вы можете вызвать logger.SetNoLock(), чтобы отключить блокировку.

    Ситуация, когда блокировка не требуется включает:

    • У вас нет зарегистрированных хуков, или вызов хуков уже является потокобезопасным.

    • Запись в logger.Out уже потокобезопасна, например:

      1. Регистратор

        . Выход защищен замками.

      2. logger.Out — это обработчик os.File, открытый с флагом O_APPEND , и каждая запись меньше 4 КБ. (Это позволяет многопоточную/многопроцессную запись)

        (см. http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/)

    Вход в Loggly из Go с помощью Logrus и Logrusly

    Go — интересный и относительно новый язык от Google (версия 1 была выпущена в марте 2012 г., так что на момент написания этой статьи ему уже более 3,5 лет). Давайте посмотрим на реализацию надежного решения для ведения журнала, чтобы дополнить его скорость и эффективность. В этом сообщении блога мы рассмотрим популярную библиотеку logrus и используем ее с хуком logrusly для подключения нашего кода Golang к серверам Loggly.com для анализа журналов.

    Вы можете выполнить набор тестов для любого проекта Go, размещенного на GitHub, с помощью карточки отчета Go:

    • A+: https://goreportcard.com/report/Sirupsen/logrus
    • A+: https://goreportcard.com/report/sebest/logrusly

    Мы будем использовать Go версии 1.5.1, выпущенной в сентябре 2015 года для этой записи в блоге, с последней версией Logrus и Logrusly. Вы можете проверить, какая версия Go установлена ​​в вашей системе, с помощью команды `go version`:

    Localhost:

    В этом примере показана версия Go для OSX, в которой мы разрабатываем код нашего примера. Когда придет время запуска на вашем сервере, убедитесь, что вы используете одну и ту же версию как на локальном, так и на удаленном серверах, чтобы избежать неожиданностей.

    Аудитория и область применения

    Мы предполагаем, что вы познакомились с основным синтаксисом Go, просмотрели приветственный мир на https://tour. golang.org/ и немного тура. Знание того, как Go обрабатывает JSON, является плюсом, но код, с которым мы будем работать, обрабатывает это для нас под капотом. Вам понадобится бесплатная учетная запись Loggly.com, чтобы собирать данные, которые мы будем отправлять. Если вы новичок в использовании Go на сервере, раздел «Среда» ниже будет полезен при настройке. Если вы опытный профессионал в Go, вы можете сразу перейти к примеру кода.

    Окружающая среда

    Go доступен бесплатно под лицензией BSD с открытым исходным кодом. Хотя Golang работает на множестве платформ (одна из его многочисленных гибких функций), мы выберем только одну, и для наших конкретных примеров мы развернем новую каплю FreeBSD 10.2 в DigitalOcean, установив Go из загрузок, найденных здесь: https: //golang.org/dl/. Подключившись к дроплету с помощью `ssh freebsd@ your.ip.address.here `, мы можем установить и настроить нашу среду. (Примечание: не вводите символ > в начале строки; он представляет приглашение tcsh по умолчанию. )

    Сервер FreeBSD:

    Если вам нужны инструкции по установке для других систем, ознакомьтесь с официальной документацией Golang: https://golang.org/doc/install

    Код нашего примера

    Если хотите чтобы поиграть непосредственно с примером кода, приведенным в этой статье, вы можете просто загрузить только наши файлы примеров с GitHub: https://github.com/DavidLiedle/loggly-blog-go-logrus-logrusly

    С копией example файлы на месте, у вас может возникнуть соблазн извлечь импортированные библиотеки и скомпилировать файл на месте, используя `go build go-logrusly.go`, а затем `./go-logrusly`, или просто запустить его напрямую с помощью `go запустить go-logrusly.go`. Однако это , а не идиоматическое Иди, чтобы делать вещи. Если вы готовы к этому, продолжайте и настройте свою среду в соответствии с передовыми методами, следуя инструкциям в разделе «Конфигурация» ниже. ( Вот подсказка: Go предлагает собственный встроенный рабочий процесс для загрузки и использования проектов GitHub. com и хранит их в специальном каталоге в вашей системе. Фактически, это одна из его уникальных и привлекательных функций, и стоит познакомиться, поскольку вы работаете в Go . )

    Обратите внимание, что этот пример кода предназначен для запуска в качестве автономной проверки концепции и не должен быть включен в ваш проект в качестве импорта. Чтобы было ясно, вы можете использовать код, вырезая и вставляя его фрагменты, которые вы считаете полезными; просто не ожидайте хороших результатов, если вы добавите строку import «github.com/DavidLiedle/loggly-blog-go-logrus-logrusly» в исходный код! (Поэтому не делайте этого.) Просто используйте пример кода, чтобы проверить, как этот пример проекта использует хук logrusly, а затем создайте свой собственный.

    Конфигурация

    Когда Go установлен и настроен, мы готовы использовать «go get» и «go install» для загрузки нашего кода. Для начала давайте настроим проект таким образом, чтобы файл go-logrusly. go находился в папке с именем $GOPATH/src/github.com/DavidLiedle/loggly-blog-go-logrus. -logrusly/ , введя следующие команды:

    Среда Localhost И сервер FreeBSD:

    При установленном проекте loggly-blog-go-logrus-logrusly скомпилированный исполняемый файл помещается в $GOPATH/bin/ и готово к выполнению! Вам нужно будет отредактировать код, чтобы вставить токен клиента Loggly.com, прежде чем он будет работать должным образом. Это представляет некоторую головную боль с идиомой самоссылки Go. Вы открыли активный репозиторий Git, редактируете и сохраняете файл. Теперь вы не синхронизированы с основной веткой исходного репозитория! Есть несколько способов справиться с ситуацией.

    Мы могли бы создать файл для хранения нашей информации Loggly и игнорировать этот файл. (Вероятно, это самый чистый подход.) Мы могли бы отредактировать loggly-blog-go-logrus-logrusly проекта и просто никогда-никогда когда-либо не соединиться со своим исходным кодом (подход «Тейлор Свифт»). Или мы могли бы разветвить проект на GitHub и сделать все для нашей собственной копии (подход с открытым исходным кодом), стараясь не передавать конфиденциальную информацию обратно в мир. Для этого сообщения в блоге мы воспользуемся подходом Swift и позволим вам открыть файл в текстовом редакторе, чтобы вставить свои учетные данные Loggly. Мы сделаем это как на нашем локальном хосте, так и на сервере.

    Редактирование нашего примера файла go-logrusly.go на сервере

    FreeBSD — отличная операционная система, но она могла бы использовать хороший текстовый редактор. То же самое можно сказать и о Emacs, поэтому мы установим его:

    Сервер FreeBSD:

    Теперь давайте откроем файл go-logrusly.go и добавим наш личный токен клиента. Если вам нужна бесплатная учетная запись Loggly.com, ознакомьтесь с разделом «Настройка Loggly.com» в конце этого поста. Сохранив исходную копию нашего кода на сервере, мы можем скомпилировать его непосредственно в архитектуру сервера, чтобы гарантировать, что статически связанный двоичный файл, который мы будем запускать, будет работать так, как задумано в рабочей среде. Вы можете предпочесть поэкспериментировать с кросс-компиляцией вашего кода с вашего локального хоста, но результат может отличаться.

    Использование logrusly

    Чтобы реализовать хук logrusly, мы импортируем пакет Logrus и пакет Logrusly вверху нашего кода:

    Имя файла: go-logrusly.go

    Давайте разберем его. Во-первых, мы идентифицируем наш файл с основным пакетом, потому что это наша окончательная форма, и мы не планируем импортировать его снова после того, как этот файл завершится. Затем мы импортируем пакеты logrus и logrusly:

    • logrus: код Go, который помогает нам войти в Go 9.0168
    • logrusly: хук, соединяющий Logrus с Loggly
    • .

    Прежде чем мы сможем использовать эти внешние ресурсы, нам нужно их получить. Этот процесс извлекает код из GitHub и помещает его в настроенный Go каталог для исходных файлов с метким названием «src». Скомпилированные библиотеки сохраняют свой вывод в папке «pkg», в папке, названной в честь архитектуры, для которой они были скомпилированы.

    Сервер FreeBSD И локальный хост:

    Успешно. В сконфигурированной автором системе OSX (с ~/go в качестве $GOPATH) это приводит к следующим дополнениям к localhost:

    Localhost (OSX 10.11.1):

    Пошаговое руководство по коду

    Хотя это и не первое, что определено в файле go-logrusly.go, функция main() — это та, которая запускает процесс, когда программа запускается впервые. Создается новый логрус, который присваивается переменной «log». Новый хук определен, и мы отредактировали код, чтобы правильно отправлять данные в Loggly. Хук добавлен в логрус, и мы готовы к логированию. Мы определяем наши поля («имя» и «возраст») и сообщение об ошибке («Привет, Дент, Артур Дент!»). Поскольку это не паника или неустранимый уровень журнала, мы вручную вызываем Flush(), и запись журнала отправляется на сервер Loggly.com. Если у нас есть правильный токен клиента, связанный с нашей учетной записью, мы увидим запись на нашей панели инструментов Loggly. com (иногда после небольшой задержки):

    Реальное использование

    Существует несколько способов успешного запуска кода Go, что может привести к некоторой путанице. Мы могли бы просто выполнить файл с заменой наших учетных данных:

    Localhost AND FreeBSD Server:

    … что отлично подходит для тестирования изменений в нашем коде во время разработки.

    Или, если вы предпочитаете скомпилировать:

    Localhost AND FreeBSD Server:

    …что создает статически связанный двоичный файл. Или, чтобы сделать вещи Go Way, мы можем установить пакет и запустить его:

    Localhost AND FreeBSD Server:

    … который компилирует статически связанный двоичный файл и помещает его в расположение нашей системы по умолчанию для скомпилированных программ Go.

    Это отлично подходит для быстрой проверки, но что, если мы хотим, чтобы наша программа продолжала работать? Очевидно, что цель сервера — служить, а не бездействовать и время от времени запускаться, когда мы запускаем быструю команду на терминале. Если мы хотим, чтобы наш скрипт работал непрерывно, нам нужно принять более надежное решение, чем просто запустить код и уйти.

    Есть несколько подходов, которые мы можем использовать. Выполняя фоновую команду, мы можем отделить запущенный процесс от нашего потока команд на терминале:

    Сервер FreeBSD:

    Или мы можем использовать систему rc для управления:

    Сервер FreeBSD:

    Развертывание выполняется быстро. растущая область внимания в отрасли, с такими инструментами, как PM2 (известный для Node.js, но полезный со многими языками), Supervisor и Docker, привлекающие большое внимание. Как бы вы ни решили запустить свой код, помните, что он может регистрироваться только во время работы!

    Запуск нашего кода

    Вот наш контрольный список всех вещей, чтобы убедиться, что мы готовы выполнить код:

    • Правильно ли установлен и настроен Go (локальный и удаленный)?
    • Есть ли у нас копия примера кода (загруженная, набранная вручную для воспроизведения или полученная с помощью `go get`?)
    • У нас есть уникальный токен Loggly? Мы вставили его в файл примера и сохранили?
    • Довольны ли мы именами файлов, путями и параметрами конфигурации, заданными в нашем коде?

    Настройка Loggly. com

    См. нашу статью о настройке ведения журнала, если вам нужно настроить свою учетную запись Loggly для получения журналов. Серверы Loggly будут принимать данные, отправленные на конечные точки http с вашим токеном клиента. Когда данные журнала находятся в системе Loggly, вы можете использовать множество мощных функций, чтобы получить представление о том, что происходит в вашем проекте. Loggly предлагает несколько ресурсов, чтобы узнать больше и получить помощь:

    • https://www.loggly.com/docs/basics-of-sending-data/
    • техническая поддержка@solarwinds.com (Связаться со службой поддержки)

    Заключение

    Мы рассмотрели, как правильно установить и запустить Logrus и Logrusly в нашем коде Go, как настроить и использовать библиотеку и ее хук, и как правильно выполнить и развернуть наш код в идиоматическом Идите, отправляя данные журнала на Loggly.com для дайджеста. Теперь вы можете создать полную систему ведения журналов, чтобы следить за своими программами Go.