1.1 Введение
Смущающе сказать это. Недавно компания была отправлена клиентской компании для собеседования с аутсорсинговыми должностями. Первоначально я подготовил несколько связанных вопросов для интервью для Redis, Rabbitmq, SSM Frameworks и некоторых обзоров проектов, которые я сделал. Я пошел на интервью с уверенностью. В результате кто -то спросил, что система журналов использовала в недавнем проекте, как только я появился? Как настроен уровень журнала? Я был смущен в то время. Я обычно позаботился об этом менеджером проекта. Я только что искал в Интернете и вставил его, и это было нормально. После того, как я закончил говорить, интервьюер посмотрел на меня глубокий взгляд. В то время мне было стыдно ...
1.2 Расскажите мне меньше о сплетнях и расскажите мне историю разработки журнала (если вы уже знаете, вы можете пропустить его и просто посмотреть на конфигурацию журнала 1.3)
Чтобы иметь глубокое понимание реализации технологии журнала, я лично рекомендую прочитать: rescack + slf4j. Что касается конфигурации журнала, то лучше понять log4j, потому что большинство проектов в настоящее время используют log4j. Хорошо, давайте начнем с истории разработки журнала:
В 1999 году сообщество Apache Open Source выпустило Log4J, что вызвало сенсацию во всем мире программы. С тех пор это стало стандартом для ведения журнала и широко использовался программистами Java. Позже, Sun также выпустил механизм ведения журнала (java.util.logging, в дальнейшем именуется Jul) в JDK версии 1.4, но механизм не был признан общественностью, что действительно жалко. Вскоре Apache запустила лампур для лаггирования Commons-Logging (которая позволяет разработчикам абстрагировать методы реализации журнала, не обращая внимания на то, какую технологию журнала используется. В условиях Layman вы хотите позвонить в Didi на своем мобильном телефоне. Если вы находитесь в Пекине, вы позвоните в Didi из Пекина, а в Гонконге вы позвоните в Диди из Гонконга). Эта структура, кажется, является презрением к Солнцу. Он может автоматически находить и вызовать технологию журнала в текущей среде для вывода журнала. Структура журнала может поддерживать log4j или jul. Коммонс-лаггинг+log4j стал классической комбинацией журналов Java в течение долгого времени после этого. Тем не менее, общее количество не обновлялось какое-то время. Интересно, не был ли недостаточно хорошего дизайна общин, и их сложнее оптимизировать. Почему ты это говоришь? Поскольку родилась следующая превосходная платформа для регистрации SLF4J, автор (Ceki Gülcü) является одним из авторов Log4J. Его SLF4J более элегантен в дизайне, и он также внедрил технологию резерва, которая также является более передовой, чем log4j. На этом этапе ситуация, когда в системе журналов преобладают общины-лагинги+log4j, начали встряхнуть, а различные общины-log4j? slf4j+log4j? slf4j+rescack? Комбинация действительно душераздирающая. Что еще более ужасно, так это то, что Ceki Gülcü Boss помог оптимизировать log4j, и с тех пор в мире была еще одна технология регистрации - log4j2. Будет ли это учиться у Tencent, чтобы сделать WeChat и QQ? Это действительно 666. Поэтому, если вы хотите глубоко понимать технологии ведения журнала, вы можете найти соответствующую информацию о Researcback + SLF4J. Что касается файла конфигурации, я думаю, вы можете просто понять подробное объяснение конфигурации Log4J, которую я написал ниже. В конце концов, многие компании теперь используют структуру log4j.
1.3 Перейдите к теме, базовая конфигурация журнала
1. Создайте новый файл log4j.properties в пакете ClassPath или ресурса (Maven Project). Следующие параметры достаточно для первоначальной конфигурации проекта. Для более подробной конфигурации,
Продолжайте просматривать конфигурацию Log4J Log4J;
#Specify Уровень и источник вывода через root Logger#Приоритет Реализация консоли источника вывода в качестве выхода консоли ########### Определить определение консоли источника выходного источника (то есть источника выходного сигнала, определяемого корневым логическим директором)#Класс реализации - это ConsoLeaPpender (источник консоли) log4j.appender.console.layout = org.apache.log4j.patternlayout#Определите конкретный формат вывода log log4j.appender.console.layout.conversionpattern =%d%-5p [%c.%m ()] -%m%n #####. Псевдоним источника вывода MyFile (то есть источник вывода, определенный корневым логическим директором)#Класс реализации - RollingFileAppender (источник вывода файла) log4j.appender.myfile = org.apache.log4j.rollingfileAppend Файл журнала log4j.appender.myfile.m axfilesize = 1024KB#определить максимум из нескольких файлов журнала (рассчитайте 1 из 0, то есть до 3 файлов здесь) #absent этого размера, сгенерированный файл до того, как будет перезаписываться log4j.appender.myfile.layout = org.apache.log4j.patternlayout#Определите специфический формат вывода log log4j.appender.console.layout.conversionpattern =%d%-5p [%c.%m ()] -%m%n ########spinting###%d:##. Формат по умолчанию ISO8601, и формат также может быть указан. #Definition выглядит следующим образом:%d {yyy Year Mm Month DD Day HH Hour Mm Minime Secends SSS}, а вывод будет: #январь 6, 2018 14: 47: 45: 590 #%P: Уровень вывода, то есть отладки, информация, Warn, ошибка, фатальная #%-5p: означает, что символ не менее 5 Bits, на п. справа), вы можете извлечь из него один пример #%c: полное имя класса, в котором находится журнал #%m: имя метода, где находится журнал #%m:2. Вызовите журнал, чтобы проверить результаты конфигурации.
Импорт org.apache.log4j.logmanager; import org.apache.log4j.logger; import org.apache.log4j.propertyconfigurator; открытый класс logpropertestest {public static void main (string [] args) { /* log4jpath = System.getProperty ("user.dir")+"// src // log // logproperties // log4j.properties"; PropertyConfigurator.configure (log4jpath);*/ logger log = logmanager.getlogger (logpropertest.class); log.debug ("Debug"); log.info («Информация»); log.warn («Предупреждение»); log.error ("ошибка"); log.fatal («фатальная ошибка»); }}1.4 Конфигурация уровня журнала
Конфигурацию уровня журнала можно разделить на три категории. Приведенная выше конфигурация заключается в настройке уровня журнала родительского регистратора, вторая категория заключается в настройке уровня журнала подклассного журнала, а третья категория-настройка уровня журнала источника выходного сигнала (консоль, файл и т. Д.). Их приоритет анализа диапазона логарифмического уровня расположен от низкого до высокого уровня. Прошу прощения за то, что не объяснил конкретное утверждение четко. Я должен быть в состоянии понять дело напрямую!
1. Если уровень журнала родительского регистратора (rootlogger) (при условии, что это уровень информации), уровень журнала подкласса не настроен, и уровень журнала источника выходного сигнала не настроен, источник выходного сигнала может выходить только уровень информации или выше;
2. Если уровень журнала родительского регистратора (rootlogger) (при условии, что это уровень информационного уровня), уровень журнала подкласса Logger (при условии, что это уровень отладки), и уровень журнала источника вывода не настроен, вывод источника выходного источника выше уровня отладки;
3. Если уровень журнала родительского регистратора (rootlogger) (при условии, что это уровень информации), уровень журнала Logger подкласса (при условии, что это уровень отладки) и уровень журнала источника вывода (при условии, что это уровень информации), источник вывода выводит информационный уровень или выше;
4. Если уровень журнала родительского регистратора (rootlogger) (при условии, что это уровень информации), уровень журнала подкласса не настроен, и настроен уровень журнала подкласса.
Уровень журнала источника вывода (при условии, что это уровень отладки), то источник вывода выводит информационный уровень или выше;
Поэтому из приведенного выше случая мы можем знать, что существует 2 логических отношения между логическим и уровнем вывода вывода источника:
1. Если источник выходного сигнала не определяет уровень журнала, он унаследовал уровень журнала, ближайший к своему подклассу; Если регистратор подкласса не определяет уровень журнала, он унаследовал родительский регистратор, наиболее близкий к его родительскому регистратору.
2. При печати журнала источник выходного сигнала будет сравниваться с уровнем журнала, определяемым подкласным регистратором, который является наиболее близким к нему. Если уровень, определяемый источником выходного сигнала, выше, чем логист подкласса, журнал будет выходить в соответствии с уровнем журнала, определенным источником вывода, и наоборот.
Поэтому в проекте вы можете настроить уровень журнала в соответствии с методом ежедневной конфигурации:
#Control Уровень журнала родительского регистрации - это информация. По умолчанию, только журналы выше уровня информации выводят во всех модулях log4j.rootlogger = info, консоль#Консоль#Управление уровнем журнала модуля отдельно для ошибок, а журналы выводятся только тогда, когда исключение происходит log4j.logger.log.logproperties = ошибка#Управление журналом. log4j.logger.log.logProperties.LogPropertiesTest=debug##################################################### НА НЕОБХОДИМО НА #Определить уровень журнала текущего источника вывода. С предыдущей конфигурацией вам не нужно настраивать этот элемент #log4j.appender.console.threshold = info #Укажите формат вывода журнала: гибкий формат log4j.appender.console.layout = org.apache.log4j.patternlayout #content of-format log4j.appender.console.contauretsion #content ofmontnpatorpaterpaterpaterpaterpater. [%c.%m ()] -%m%n
1.5 Заключение
На данный момент, я считаю, что у вас есть базовое понимание конфигурации журнала. В статье есть много вещей, которые могут быть неправильными, и все герои могут указать на них. Я написал статью, чтобы суммировать ее, чтобы иметь возможность глубоко понять конфигурацию этой технологии, чтобы у меня было более глубокое понимание ее.