Разное

Зап сахара столица: ЗАПАДНАЯ САХАРА | Энциклопедия Кругосвет

Западная Сахара балансирует на грани войны / В мире / Независимая газета






Фото Reuters


После почти 30 лет относительного затишья резко обострилась обстановка в Западной Сахаре. Подразделения марокканской армии вошли в буферную зону и приступили к установке кордона безопасности. Цель операции – разблокировать дорогу, перекрытую западносахарскими ополченцами в конце октября, и восстановить свободное перемещение товаров и людей между Мавританией и Марокко. Глава самопровозглашенной Сахарской Арабской Демократической республики (САДР) и генеральный секретарь фронта ПОЛИСАРИО (Народный фронт освобождения Сегиет-эль-Хамра и Рио-де-Оро) Брахим Гали заявил о выходе из соглашения о перемирии между Марокко и этой организацией, подписанного в 1991 году.


Один из руководителей фронта ПОЛИСАРИО, Мухаммед Салем Ульд Салек обвинил власти Марокко в нарушении режима прекращения огня и разжигании войны в регионе. Кроме того, он заявил, что его организация, равно как и администрация САДР, утратили доверие к генеральному секретарю ООН Антониу Гутерришу, поскольку недавно подготовленный им доклад не соответствует букве и духу совместного плана ООН и Африканского союза (АС) по урегулированию конфликта в Западной Сахаре.


Агентство AFP приводит слова другого представителя фронта ПОЛИСАРИО, Сиди Мухаммеда Омара, который считает, что доклад Гутерриша создает ложное впечатление спокойной ситуации, хотя в действительности в регионе царит хаос. Он утверждает, что марокканские власти грубо нарушают права человека на оккупированных территориях, прибегая к похищениям, пыткам и убийствам функционеров ПОЛИСАРИО и САДР.


В свою очередь, представители Марокко говорят, что начатая Рабатом операция не носит наступательного характера и осуществляется без каких-либо агрессивных намерений. Глава МИДа Насер Бурита опроверг появившиеся в СМИ сообщения о вооруженных столкновениях с бойцами Западной Сахары, заявляя о том, что марокканские силы ограничиваются лишь предупредительными выстрелами.


Обстановка в регионе начала обостряться с начала нынешнего года – после того как правительство Кот-д’Ивуара, а вслед за ним еще несколько небольших африканских государств, в том числе Габон, Коморские Острова, а также Сан-Томе и Принсипи, приняли решение об открытии своих консульств в Эль-Айюне, небольшом городке, на который претендует САДР. В Западной Сахаре такие шаги были восприняты как вопиющие нарушения международного права, резолюций ООН и ее Генеральной Ассамблеи по вопросу о деколонизации Западной Сахары.


Протест САДР был поддержан Алжиром, традиционным спонсором ПОЛИСАРИО, который пошел даже на отзыв своего посла из Кот-д’Ивуара, Намибией и рядом других африканских стран, признавших независимость САДР. Сыграло свою роль и то обстоятельство, что Рабат еще в 1984 году вышел из АС и вплоть до 2017 года оставался вне этой организации. Главной причиной выхода из АС послужило несогласие марокканцев с позицией большинства африканских стран, признавших САДР. Однако, оставаясь вне рамок АС, Марокко лишало себя возможности отстаивать свои интересы с трибуны этой представительной организации.


На этот раз АС призывает стороны к сдержанности, избегая резких заявлений в адрес Марокко. К этому же призывают и арабские страны. Правда, при этом они, во-первых, выражают поддержку Марокко, а во-вторых, призывы к сдержанности адресуются не только марокканцам и западносахарцам, но еще и алжирцам, чьи отношения с Рабатом характеризуются как весьма прохладные. Опасность конфликта в Западной Сахаре в том, что новая война может не только опалить Марокко и САДР, но и перекинуться на Алжир.


В такой ситуации, когда африканские страны и арабский мир охватила серьезная обеспокоенность в связи с событиями в Западной Сахаре, инициативу выступить в роли посредника-миротворца, похоже, берет на себя Египет. Глава египетского МИДа Самех Шукри звонил своим коллегам Сабри Букадуму в Алжир и Насеру Бурите в Марокко, призывая их страны воздержаться от дальнейшей эскалации. Европа, за исключением Франции, имеющей здесь особые интересы, пока что большой озабоченности не выразила.


Напомним, что в 1975 году Испания отказалась от своей колонии на северо-западном побережье Африки. В борьбу за нее вступили Мавритания, Марокко и фронт ПОЛИСАРИО. Через год объявили о создании САДР. Немного погодя отказалась по причине крайней бедности от претензий на Западную Сахару Мавритания. Марокканцы воевали с бойцами ПОЛИСАРИО вплоть до 1991 года, пока в соответствии с резолюцией 960 СБ ООН не подписали соглашение о прекращении огня и проведении референдума. Он и должен был решить судьбу территории. Однако референдум все время переносится, так как до сих пор никто не может разобраться с избирательными правами обитающих здесь людей.


Пока всенародное волеизъявление не состоялось, за порядком здесь присматривает спецмиссия ООН по наблюдению за референдумом в Западной Сахаре (ООНРЗС). В миссии, вполне себя успешно проявившей, с самого ее начала в 1991 году служат российские военные наблюдатели ООН. За эти без малого 30 лет через нее прошло свыше 500 наших офицеров.


США, большая часть Европы и арабского мира отдают право на Западную Сахару Марокко. Россия, Германия, большинство африканских стран и Алжир считают эту территорию недеколонизированной страной, будущее которой еще предстоит решить. Тем не менее де-факто САДР уже признали 84 государства. 

погода и климат в Западной Сахаре

Западная Сахара – спорная территория в северной части африканского материка, чьи права подлежат урегулированию со стороны ООН. Общая площадь 266 800 км². С 1976 по 1979 длилась аннексия территорий, которые на сегодняшний день принадлежат Марокко. В прошлом страна была известна как Испанская Сахара. На севере проходит граница с Марокко, на северо-востоке – с Алжиром, на востоке и юге граничит с Мавританией. Западные берега омывается водами Атлантического океана. Столица Эль-Аюн.

Огромные территории Западной Сахары занимают развеваемые ветрами пески и дюны, и всего 4% приходится на оазисы. Наивысшая точка достигает 823 м над уровнем моря. Постоянных рек на территории страны нет, но во время сезона дождей появляются временные: Сабалера, Эль-Фуш и другие.

Западная Сахара расположена в полосе сухого тропического климата, для которого характерны высокие температуры и частые перепады суточных показателей. Почва днем может прогревается до +65°С, остывая за ночь до 0°С. Осадки в течение года скудные, 50-200 мм. Океанический атмосферный фронт часто приносит туман и понижение температур. Смерчи и песчаные бури – явление довольно распространенное. В центре страны климат пустынный и жаркий, со средними температурами +25°С…+30°С. На побережье показатели более комфортные: +17°С…+20°С.

Для туристов представляет интерес столица Эль-Аюн. Здесь находятся не только памятки архитектуры, но и заповедник со множеством птиц. Чтобы путешествие прошло максимально комфортно, обратите внимание на погоду по месяцам.

Погода в Западной Сахаре в январе

В январе на побережье Атлантического океана вода прогрета до +17°С. Этот месяц один из самых холодных в году. В Эль-Аюне средние температуры варьируются от +22,5°С днем до +15,5°С ночью. В январе на территории столицы выпадает до 4 мм росы, ветер дует со скоростью 6 м/с. Световой день длится 9 часов. Уровень влажности 65%. Средние температуры в стране не превышают +16°С.

Погода в Западной Сахаре в феврале

В феврале на территории страны в среднем 20 ясных и 10 облачных дней. Средние температуры держатся на отметке +16°С. Уровень влажности 71%. В столице днем +22°С, ночью +15°С. Температура на побережье опускается до +16°С. Ветер дует со скоростью 6,5 м/с. Осадки скудные, за ночь выпадает 5,5 мм росы.

Погода в Западной Сахаре в марте

В марте среднесуточные температуры начинают повышаться. В среднем температура в стране не ниже +17,4°С. В столице воздух прогревается до +24,7°С днем, до +16,6°С ночью. Осадки крайне скудные – 3,4 мм. Температура воды на побережье Атлантического океана +16,9°С. Ветер дует со скоростью 6,5 м/с. Влажность опускается до 66%.

Погода в Западной Сахаре в апреле

В апреле показатели мало отличаются от мартовских, среднесуточные температуры продолжают повышаться. Днем в столице воздух прогревается до +26°С, ночью охлаждается до +17°С. В этом месяце за ночь выпадает до 3 мм росы. Температура воды на побережье океана прогревается до +17,5°С. Ветер дует со скоростью 6,5 м/с. Влажность воздуха 67%. В среднем в стране до +19°С тепла.

Погода в Западной Сахаре в мае

В мае вода в океане прогревается до +18°С, влажность повышается до 68%. В столице Эль-Аюн температура воздуха днем +27,8°С, ночью +18,5°С. Осадки крайне скудные – до 1,5 мм. Средняя скорость ветра в столице 7,5 м/с. В среднем температура воздуха в стране не ниже +20,5°С.

Погода в Западной Сахаре в июне

Июнь считается одним из самых солнечных и ветреных месяцев в году. Среднесуточные показатели воздуха по стране варьируются в пределах +20,5°С. Порывы ветра достигают 7,8 м/с. Средняя влажность воздуха 68%. В столице световой день достигает максимума и длится 12 часов. За это время воздух прогревается до +29°С, остывая в темное время суток до +18,5°С. Вода в океане бодрящая: +18°С. В июне выпадает минимальное количество осадков, которое не превышает 1 мм.

Погода в Западной Сахаре в июле

Самый теплый, самый солнечный и самый ветреный – это месяц июль. Среднесуточные показатели воздуха достигают +22,7°С. Ветер дует со скоростью 8,6 м/с. Влажность воздуха около 70%. В столице световой день длится 12 часов. За это время воздух прогревается до +31,8°С днем, остывая ночью до +20,6°С. Самые смелые могут искупаться в океане, где вода +19°С. Осадков в этом месяце выпадает до 2,5 мм.

Погода в Западной Сахаре в августе

В августе тоже жарко, солнечно и ветрено. В среднем в стране до +24°С тепла. В столице температура варьируется от +33,5 днем до +22°С ночью. Порывы ветра достигают 8,2 м/с, влажность воздуха 69%. Световой день начинает убывать, количество солнечных часов в столице чуть больше 11. Вода в океане прогревается до +19,5°С. За один дождливый день может выпасть 11,5 мм осадков.

Погода в Западной Сахаре в сентябре

В сентябре вода на побережье прогревается до комфортной температуры +20,2°С.Среднесуточные показатели воздуха по стране составляют +23,9°С. Ветер дует со скоростью 6,8 м/с. Средняя влажность воздуха 71%. В столице световой день продолжает убывать и составляет 10 часов и 30 минут. Воздух в Эль-Аюне прогревается до +30,7°С днем, остывая ночью до +21,8°С. В сентябре всего один дождливый день, осадков выпадает до 13,5 мм.

Погода в Западной Сахаре в октябре

В октябре вода на побережье достигает максимальных показателей +20,5°С. Среднесуточные температуры воздуха постепенно понижаются: в среднем в стране +22,9°С тепла. Влажность воздуха 71%. В столице днем +29,4°С, ночью 21,8°С. Один дождливый день приносит 9 мм осадков. Октябрь считается самым безветренным в году: средние показатели силы ветра не превышают 5,5м/с.

Погода в Западной Сахаре в ноябре

В ноябре вода в океане еще подходит для купания: +19,8°С. Средняя влажность воздуха в стране достигает максимальных показателей 72%. За один дождливый день в столице выпадает 16,5 мм осадков, световой день длится около 9 часов. За это время воздух прогревается до +26,3°С днем, остывая ночью до +19,7°С. Средняя скорость ветра 6 м/с.

Погода в Западной Сахаре в декабре

Как все три зимних месяца, декабрь относится к наиболее холодным в году. Средние температуры днем опускаются до +17,9°С. В столице днем +23,8°С, ночью +17,5°С. За месяц выпадает до 3 мм осадков. В декабре самая низкая влажность, не превышающая 51%, ветер слабый, до 6 м/с.

Технических ветеранов получает 4 миллиона долларов на разработку роботов на солнечных батареях, которые уничтожают сорняки и регенерируют почву — GeekWire

Прототип робота Aigen для прополки и улучшения почвы. (Фото Aigen)

Новое финансирование: Aigen, стартап, разрабатывающий роботов на солнечных батареях для борьбы с сорняками и регенерации почвы, привлек 4 миллиона долларов венчурного капитала. Посевной раунд проводился NEA при участии AgFunder, Global Founders Capital и ReGen Ventures. Агротехнологическая компания из Киркленда, штат Вашингтон, начала работу в 2020 году.

Основатели: Соучредитель Рич Уорден был одним из первых инженеров сиэтлской Pure Watercraft, компании по производству электрических лодок, в которой General Motors недавно приобрела долю и оценивается в 600 миллионов долларов. После этого Вурден пять лет работал инженером-механиком в Tesla, а в 2018 году вернулся в Pure Watercraft еще на два года.

Соучредитель Кенни Ли имеет опыт работы в области кибербезопасности и является соучредителем стартапа, приобретенного в 2017 году.

Они познакомились через сообщество Slack под названием Work on Climate. В компании пять сотрудников, и к концу года она может утроить штат.

Технология: Aigen создает небольших роботов, которые используют искусственный интеллект для автономной навигации по рядам сельскохозяйственных культур, а также для выявления и удаления нежелательных сорняков с помощью механических рук. ИИ можно научить оставлять безвредные сорняки, которые помогают удерживать углерод. По словам основателей, поскольку вегетационный период совпадает с солнечным светом, солнечная энергия является жизнеспособным источником энергии. Роботы несут батареи для дополнительной мощности.

Команда тестирует свой прототип на фермерах, выращивающих сахарную свеклу, в Айдахо. Они начнут альфа-тестирование новых устройств в конце этого года и перейдут к бета-тестированию с первыми клиентами в 2023 году. и соучредитель Aigen Кенни Ли. (Aigen Photo)

Конкурс: В космосе есть похожие стартапы, в том числе Carbon Robotics, которая развертывает более крупные роботизированные машины, уничтожающие сорняки с помощью лазеров. Компания из Сиэтла привлекла 36 миллионов долларов с момента запуска в 2018 году.0005

В то время как машина Carbon Robotics может обрабатывать 16 акров в день по сравнению с тремя акрами Aigen, роботы от Aigen весят меньше и не уплотняют почву, а также не производят дополнительных выбросов углерода благодаря солнечной энергии, говорится в сообщении компании. . Робот Айгена будет дешевле.

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

Wurden переключился с электромобилей на сельскохозяйственные технологии из-за огромных возможностей для улучшения климата. По его словам, в дополнение к устранению выбросов углерода «с сельским хозяйством у вас есть потенциал стать углеродно-отрицательным».

Добавление Uber-go Zap Logger в проект GoLang. – Мой журнал разработчиков

В этом блоге содержится информация о том, как добавить регистратор Uber-go Zap в проект Golang

Этот блог является частью серии Golang.

  • 1.0 Введение
  • 2.0 Go Logger по умолчанию
    • 2.1 Внедрение Go Logger
    • 2.2 Плюсы и минусы Go Logger
  • 3.0 Uber-go Zap
    • 3.1 Почему Uber-go Zap
    • 3.2 Установка
    • 3.3 Настройка Zap Logger
    • 3.4 Настройка регистратора
  • 4.0 Ротация бревен с помощью Lumberjack
    • 4.1 Установка
    • 4.2. Добавление поддержки дровосека в zap logger
    • 4.3 Проверка всего вместе

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

  • Возможность записи событий в файл, а не в консоль приложения.
  • Ротация журналов — возможность ротации файлов журналов в зависимости от размера файла, времени или интервала и т. д.
  • Поддержка различных уровней журналов. например, INFO, DEBUG, ERROR и т. д.
  • Должна быть напечатана основная информация, такая как вызываемое имя файла/функции и номер строки, время журнала и т. д.

Прежде чем мы перейдем к Zap-пакету Uber-go, давайте сначала рассмотрим базовые функции ведения журнала, которые предоставляет Golang из коробки.
Пакет ведения журнала по умолчанию, предоставляемый Golang, находится по адресу https://golang.org/pkg/log/

2.1. Внедрение Go Logger

. Внедрение средства ведения журнала Golang очень просто: создайте новый файл журнала и установите его в качестве места вывода журнала. .

2.1.1 Настройка регистратора

Мы можем настроить регистратор, как показано ниже

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован иначе, чем показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode.
Узнайте больше о двунаправленных символах Unicode

Показать скрытые символы

go»>

функция SetupLogger() {
logFileLocation, _ := os.OpenFile(«/Users/in-sunit.chatterjee/test.log», os.O_CREATE|os.O_APPEND|os.O_RDWR, 0744)
лог.SetOutput(logFileLocation)
}

просмотреть необработанные данные

SetupLogger.go

размещено на ❤ GitHub

2.1.2 Использование регистратора

Давайте напишем некоторый фиктивный код, который будет использовать регистратор.
В нашем текущем примере мы создадим HTTP-соединение с URL-адресом и зарегистрируем либо код состояния, либо ошибку в файле журнала.

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован иначе, чем показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode.
Узнать больше о двунаправленных символах Unicode

Показать скрытые символы

go»>

func simpleHttpGet (строка URL-адреса) {
соответственно, ошибка := http.Get(url)
если ошибка != ноль {
log.Printf(«Ошибка получения URL-адреса %s: %s», url, err.Error())
} еще {
log.Printf(«Код состояния для %s : %s», url, соотв. Статус)
или Тело.Закрыть()
}
}

просмотреть необработанные данные

SimpleHttpGet.go

размещено с помощью ❤ на GitHub

2.1.3 Регистратор в действии

Теперь давайте выполним приведенный выше код и посмотрим, как работает регистратор.

 основная функция () {
Сеталоггер()
простойHttpGet("www. google.com")
простойHttpGet("http://www.google.com")
} 

Когда мы выполняем приведенный выше код, мы можем увидеть 9Создан 0208 test.log , и в файл журнала добавлены следующие строки.

 24.05.2019 01:14:13 Ошибка при получении URL-адреса www.google.com : Получить www.google.com: неподдерживаемая схема протокола ""
24.05.2019 01:14:14 Код состояния для http://www.google.com: 200 OK 

2.2 Плюсы и минусы Go Logger

2.2.1 Плюсы

Самые большие преимущества в том, что он очень прост в использовании. Мы можем настроить любой io.Writer для вывода журнала и отправки журналов записи на него.

2.2.2 Минусы

  • Только базовые уровни журнала
    • Только один параметр для Печать . Не поддерживает несколько уровней, таких как INFO / DEBUG .
  • Для ведения журнала ошибок он имеет Fatal и Panic
    • Fatal Logging завершает программу, вызывая os. Exit(1)
    • Panic Logging после записи сообщений журнала паники выдает .
    • Однако ему не хватает уровня журнала ERROR , который может регистрировать ошибки без паники или выхода из программы.
  • Отсутствуют возможности форматирования сообщений журнала — например, регистрация имени функции вызывающего абонента и номера строки, форматирование формата даты и времени и т. д.
  • Не обеспечивает возможности ротации журнала.

Top ∆

Zap — это молниеносно быстрая, структурированная, уровневая регистрация в Go.

3.1 Почему Uber-go zap

  • Обеспечивает как структурированное ведение журнала, так и ведение журнала в стиле printf
  • Предполагается, что он очень быстрый.

Согласно документации Uber-go Zap, он более эффективен, чем сопоставимые пакеты структурированного ведения журналов, а также быстрее, чем стандартная библиотека.
Ниже приведена информация о сравнительном анализе, опубликованная ZAP

. ALLOCS/OP ⚡ ZAP (SUGARED) 4173 NS/OP 21 ALLOC/OP Zerolog 16154 NS/OP

1111111111111111111111111111111111111111111111111111111111111111111111.0108

lion 16341 ns/op 111 allocs/op go-kit 17049 ns/op 126 allocs/op logrus 23662 ns/op 142 allocs/ ОП

Регистрация статической строки, без какого -либо контекста или Printf -Стиль.0112 ⚡️ zap 361 ns/op 0 allocs/op ⚡️ zap (sugared) 534 ns/op 2 allocs/op zerolog 323 ns/ op 0 allocs/op standard library 575 ns/op 2 allocs/op go-kit 922 ns/op 13 allocs/op lion 1413 нс/оп 10 ALLOCS/OP LOGRUS 2291 NS/OP 27 ALLOCS/OP

3.

2 Установка

Установка ZAP Пакет. zap

3.3 Настройка Zap Logger

Zap предлагает два типа регистраторов — Sugared Logger и Logger .

В случаях, когда производительность хорошая, но не критическая, используйте SugaredLogger . Это в 4-10 раз быстрее, чем другие пакеты структурированного ведения журнала, и поддерживает как структурированное ведение журнала, так и ведение журнала в стиле printf.

В случаях, когда важны каждая микросекунда и каждое выделение, используйте Logger. Он даже быстрее, чем SugaredLogger, и выделяет гораздо меньше памяти, но поддерживает только строго типизированное структурированное ведение журнала.

3.3.1 Регистратор

  • Создайте регистратор, вызвав zap.NewProduction() / zap.NewDevelopment() или zap.Example()
  • Каждое из приведенных выше действий создаст регистратор. Единственная разница заключается в информации, которую он будет регистрировать. например, производственный регистратор регистрирует информацию о вызывающей функции, дату и время и т. д. по умолчанию.
  • Информация о звонке/Ошибка и т. д. в регистраторе.
  • По умолчанию логи будут поступать в консоль приложения.

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован иначе, чем приведенный ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode.
Узнайте больше о двунаправленных символах Unicode

Показать скрытые символы

var logger *zap.Logger
функция main() {
ИнитЛоггер()
отложить logger. Sync()
SimpleHttpGet("www.google.com")
SimpleHttpGet("http://www.google.com")
}
функция InitLogger() {
Регистратор

, _ = zap.NewProduction()
}
функция SimpleHttpGet (строка URL-адреса) {
соответственно, ошибка := http.Get(url)
если ошибка != ноль {
регистратор.Ошибка(
«Ошибка получения URL-адреса. .»,
zap.String("url", url),
зап.Ошибка(ошибка))
} еще {
logger.Info("Успех..",
zap.String("statusCode", соотв.Статус),
zap.String("url", url))
или Тело.Закрыть()
}
}

view raw

Uber-GoZap — BasicLogger.go

размещено на ❤ на GitHub

В приведенном выше коде мы сначала создали Logger, а затем регистрировали сообщения, используя методы Logger, такие как Info/Error.

Синтаксис методов логгера такой.

 func (log *Logger) MethodXXX (строка сообщения, поля ... поле) 

где, MethodXXX - это функция Variadic, которая может быть Info / Error / Debug / Panic и т. д. Каждый из этих методов принимает строка сообщения и любое число zapcore.Field аргументов.
Каждый zapcore.Field представляет собой не что иное, как набор аргументов ключ/значение.

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

 {"level":"error","ts":1558882294.406781,"caller":"basiclogger/UberGoLogger.go:26","msg":" Ошибка получения URL-адреса..","url":"www.google.com","error":"Получить www.google.com: неподдерживаемая схема протокола"","stacktrace":"main.SimpleHttpGetnt/Users/in -sunit.chatterjee/learn/GitHub/go/src/LearningGo/examples/logger/basiclogger/UberGoLogger.go:26nmain.mainnt/Users/in-sunit.chatterjee/learn/GitHub/go/src/LearningGo/examples/logger /basiclogger/UberGoLogger.go:13nruntime.mainnt/usr/local/go/src/runtime/proc.go:201"}
{"уровень":"информация","тс":1558882294.665447,"вызывающий":"basiclogger/UberGoLogger.go:31","msg":"Успешно..","statusCode":"200 OK","url":"http://www.google.com" }
 

3.

3.2 Sugared Logger

Теперь давайте реализуем то же самое, используя Sugared Logger.

  • Большая часть реализации почти одинакова.
  • Единственная разница в том, что мы извлекаем SugaredLogger из главного регистратора, вызывая для него метод .Sugar() .
  • Затем используйте SugaredLogger для регистрации операторов в printf style

Ниже приведен измененный код для использования SugaredLogger вместо Logger .

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован иначе, чем показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode.
Узнайте больше о двунаправленных символах Unicode

Показать скрытые символы

go">

переменная сахараLogger *zap.SugaredLogger
функция main() {
ИнитЛоггер()
отложить SugarLogger.Sync()
SimpleHttpGet("www.google.com")
SimpleHttpGet("http://www.google.com")
}
функция InitLogger() {
регистратор, _ := zap.NewProduction()
SugarLogger = регистратор.Sugar()
}
функция SimpleHttpGet (строка URL-адреса) {
сахараLogger. Debugf("Попытка выполнить запрос GET для %s", url)
соответственно, ошибка := http.Get(url)
если ошибка != ноль {
SugarLogger.Errorf("Ошибка получения URL-адреса %s: Ошибка = %s", URL-адрес, ошибка)
} еще {
сахараLogger.Infof("Успех! Код статуса = %s для URL %s", соответственно Статус, URL)
или Тело.Закрыть()
}
}

просмотреть необработанные данные

Uber-GoZap – SugarLogger 01.go

размещено на ❤ от GitHub

Когда вы запустите приведенный выше код, вы увидите следующий вывод

 {"level":"info","ts ":1558883371.550854,"вызывающий":"basiclogger/UberGoLogger. go:27","msg":"Ошибка получения URL-адреса www.google.com : Ошибка = Получить www.google.com: неподдерживаемая схема протокола """}
{"level":"info","ts":1558883371.77706,"caller":"basiclogger/UberGoLogger.go:29","msg":"Успешно! Код статуса = 200 OK для URL-адреса http://www.google. ком"}
 

Как вы можете заметить, оба регистратора до сих пор печатали вывод только в структурированном формате JSON.

В более поздней части этого блога мы рассмотрим SugaredLogger более подробно и посмотрим, как мы можем настроить его дальше.

3.4 Настройка регистратора

3.4.1 Запись в файл вместо консоли

Первое изменение, которое мы хотим сделать, это запись в файл вместо консоли приложения.

  • Вместо создания регистратора с использованием метода PRESET, такого как zap.NewProduction(), мы будем использовать метод zap.New(...) и передавать все конфигурации вручную.
 func New(core zapcore.Core, options ... Option) *Logger 

zapcore.Core , requires three things – Encoder , WriteSyncer , LogLevel

1. Encoder : Кодировщик (как будут записываться логи). Мы будем использовать готовый NewJSONEncoder() и использовать PRESET ProductionEncoderConfig() 9.0209 .

 zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()) 

2. WriterSyncer — указывает, куда будут записываться журналы. Мы

 файл, _ := os.Create("./test.log")
writeSyncer := zapcore.AddSync(file) 

3. Уровень лога , на котором будут записываться логи.

Мы изменим код регистратора из приведенного выше раздела и перепишем метод InitLogger() . Остальные методы — main() / SimpleHttpGet() остается прежним.

https://gist.github.com/chatterjeesunit/4ca0daaddf658aa3a7cea30b33bc1887

Когда функция main() из приведенного выше раздела вызывается с этими измененными конфигурациями регистратора, в файл будет напечатан следующий вывод — test. log

 ➜ LearningGo git:(master) ✗ cat test.log
{"level":"debug","ts":1558897671.680222,"msg":"Попытка выполнить запрос GET для www.google.com"}
{"level":"error","ts":1558897671.6803782,"msg":"Ошибка получения URL-адреса www.google.com : Ошибка = Получить www.google.com: неподдерживаемая схема протокола """}
{"уровень":"отладка","тс":1558897671.6803992,"msg":"Попытка выполнить запрос GET для http://www.google.com"}
{"level":"info","ts":1558897671.974973,"msg":"Success! statusCode = 200 OK для URL http://www.google.com"} 

3.4.2 Изменить Json Encoder на обычный журнал Кодировщик

Теперь мы хотим изменить кодировщик с кодировщика JSON на обычный кодировщик. Для этого нам нужно изменить NewJSONEncoder() на NewConsoleEncoder() .

 возврат zapcore.NewConsoleEncoder(zap.NewProductionEncoderConfig()) 

Когда функция main() из приведенного выше раздела вызывается с этими измененными конфигурациями регистратора, в файле будет напечатан следующий вывод: test. log

 ➜ LearningGo git:(master) ✗ cat test.log
1.558898031797767e+09 отладка Попытка выполнить запрос GET для www.google.com
1.558898031797886e+09 ошибка Ошибка при получении URL-адреса www.google.com : Ошибка = Получить www.google.com: неподдерживаемая схема протокола ""
1.5588980317979e+09 отладка Попытка выполнить запрос GET для http://www.google.com
1,5588980320494049e+09 Информация Удачи! statusCode = 200 OK для URL http://www.google.com
 

3.4.3 Изменение кодировки времени и добавление сведений о вызывающем абоненте

С изменением, которое мы внесли в конфигурации, возникли две проблемы.

  • Время отображается в нечитаемом для человека формате. например 1.5588980320494049e+09
  • Подробная информация о функциях вызывающего абонента не отображается в журналах

Первое, что мы делаем, это переопределяем значение по умолчанию ProductionConfig() и внесите следующие изменения:

  • Измените кодировку на время.
  • Запишите уровень журнала заглавными буквами в файл журнала.
 функция getEncoder() zapcore.Encoder {
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
вернуть zapcore.NewConsoleEncoder (encoderConfig)
} 

Далее мы изменим код регистратора zap, чтобы добавить функциональность для регистрации информации о вызывающей функции. Для этого мы добавим Option to zap.New(..) function

 logger := zap.New(core, zap.AddCaller()) 

Когда функция main() из приведенного выше раздела вызывается с этими измененными конфигурации регистратора, то в файл будет напечатан следующий вывод: test.log

 ➜ LearningGo git:(master) ✗ cat test.log
2019-05-27T01:06:37.680+0530 DEBUG basiclogger/UberGoLogger.go:47 Попытка выполнить запрос GET для www.google.com
2019-05-27T01:06:37.680+0530 ОШИБКА basiclogger/UberGoLogger. go:50 Ошибка при получении URL-адреса www.google.com : Ошибка = Получить www.google.com: неподдерживаемая схема протокола ""
2019-05-27T01:06:37.680+0530 DEBUG basiclogger/UberGoLogger.go:47 Попытка выполнить запрос GET для http://www.google.com
2019-05-27T01:06:37.959+0530 ИНФОРМАЦИЯ basiclogger/UberGoLogger.go:52 Удачи! statusCode = 200 OK для URL http://www.google.com
 

Единственная вещь, которой не хватает в этом логгере, это функция ROTATION LOG.

Zap изначально не поддерживает чередование файлов журналов

Чтобы добавить функцию ротации журналов, мы добавим поддержку Lumberjack в Logger.

4.1 Установка

Чтобы установить Lumberjack, мы выполним следующую команду

 go get -u github.com/natefinch/lumberjack 

4.2. Добавление поддержки Lumberjack в zap logger

Чтобы добавить поддержку Lumberjack в Zap, нам нужно изменить код WriteSyncer . Мы изменим функцию getLogWriter(), как показано ниже:

 func getLogWriter() zapcore. WriteSyncer {
лесоруб := &лесоруб.Логгер{
Имя файла: "./test.log",
Максимальный размер: 10,
Максимальное количество резервных копий: 5,
Максимальный возраст: 30,
Сжатие: ложь,
}
вернуть zapcore.AddSync(lumberJackLogger)
} 

Lumberjack Logger принимает следующие атрибуты в качестве входных данных

  • Имя файла : расположение файла журнала
  • MaxSize : максимальный размер файла журнала в МБ до его ротации
  • MaxBackups : максимальное количество. старых файлов для хранения
  • MaxAge : максимальное количество дней, в течение которых будут храниться старые файлы
  • Compress : сжимать/архивировать старые файлы.

4.3 Тестирование всего вместе

После всех вышеуказанных изменений код регистратора Zap/Lumberjack будет выглядеть примерно так.

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован не так, как показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode.
Узнайте больше о двунаправленных символах Unicode

Показать скрытые символы

переменная сахараLogger *zap.SugaredLogger
функция main() {
ИнитЛоггер()
отложить SugarLogger.Sync()
SimpleHttpGet("www.google.com")
SimpleHttpGet("http://www.google.com")
}
функция InitLogger() {
WriterSyncer := getLogWriter()
Кодировщик

: = getEncoder()
ядро ​​:= zapcore. NewCore(кодировщик, WriterSyncer, zapcore.DebugLevel)
регистратор := zap.New(core, zap.AddCaller())
SugarLogger = регистратор.Sugar()
}
функция getEncoder() zapcore.Encoder {
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
вернуть zapcore.NewConsoleEncoder(encoderConfig)
}
функция getLogWriter() zapcore. WriteSyncer {
лесорубДжекЛоггер := &лесоруб.Логгер{
Имя файла: "./test.log",
Максимальный размер: 10,
MaxBackups: 5,
Максимальный возраст: 30,
Сжатие: ложь,
}
возврат zapcore.AddSync(lumberJackLogger)
}
функция SimpleHttpGet (строка URL-адреса) {
сахараLogger.Debugf("Попытка выполнить запрос GET для %s", url)
соответственно, ошибка := http. Get(url)
если ошибка != ноль {
SugarLogger.Errorf("Ошибка получения URL-адреса %s: Ошибка = %s", URL-адрес, ошибка)
} еще {
сахараLogger.Infof("Успех! Код статуса = %s для URL %s", соответственно Статус, URL)
или Тело.Закрыть()
}
}

просмотреть необработанные данные

Uber-GoZap — SugarLogger — Custom02.go

размещено с помощью ❤ на GitHub

При выполнении приведенного выше кода в выходном файле будут отображаться следующие журналы — test.log

 2019-05-27T01:22:20.197+0530 DEBUG basiclogger/UberGoLogger.go:52 Попытка выполнить запрос GET для www.google.com
2019-05-27T01:22:20.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *