Java включи API библиотека за регистриране като част от своята рамка от JDK 1.4. Днес това е вградена поддръжка от Java. Тази библиотека обаче е адаптивна и разширяема в смисъл, че можем да използваме едно или повече алтернативни решения за регистриране, предоставени от библиотеки на трети страни. Въпреки че тези решения на трети страни имат различен подход за създаване на регистрационни данни, те в крайна сметка споделят една и съща цел за регистриране на съобщения от времето на изпълнение на приложението. Тази статия изследва основите на регистрирането и показва как може да се използва в програма на Java.
Регистриране на Java
регистрационен файл обикновено означава поддържане на някакъв вид запис. От гледна точка на програмирането, това е процес на записване на съобщения в лог файл по време на изпълнение на програмата. Постоянните дневници на съобщения се препращат, обикновено от програмиста, за събиране на определена статистическа информация по време на изпълнение, която, когато се анализира, може да разкрие непредвидени ситуации. Всъщност може да има много различни причини, поради които се използва регистрация и това е само една от тях. Според документацията на Java API, има четири основни употреби на регистриране:
- За диагностика на проблеми от крайни потребители и системни администратори.
- Удобно е инженерите на полеви сервизи да диагностицират проблема от регистрираните съобщения и да го отстранят бързо.
- Организацията за разработка може да проследи вътрешното изпълнение на конкретна подсистема и да я анализира.
- Разработчиците могат да отстраняват грешки в приложението, което се разработва, като получат бърза представа за основния проблем от регистрираните съобщения.
Регистрирането на Java API е проектирано по евтин начин в смисъл, че може да се остави като остатък дори в производствено приложение. Това не създава големи разходи за ефективността на изпълнението на програмата. API предоставя механизма за динамична промяна на производството на регистрационни съобщения, така че въздействието на регистрирането да може да бъде сведено до минимум по време на операции, които изискват максимална ефективност. API се състои от редица класове и интерфейси, които могат да бъдат персонализирани чрез разширяването им. Целият API за регистриране е пакетиран под java.util.logging . Класовете и интерфейсите в този пакет предоставят основните средства за регистриране в Java.
Нива на регистриране
Неотложността на влизане в Java програма може да бъде категоризирана на няколко нива. Чрез изравняване нагоре и надолу можем да увеличим или намалим разходите за влизане в производствено приложение. По този начин контролираме ефективността на изпълнението на приложението, когато е необходимо да регистрирате едно или повече от събитията му. Това се постига чрез клас, наречен Ниво , което определя важността на сечта. Нивото на журнала е подредено и определено от статичен целочислени константи, като например:
- Ниво.ВСИЧКИ: Всички съобщения се записват, независимо от важността им
- Ниво.ИЗКЛ.: Регистрацията е изключена
- Ниво.ТЕЖКО: Показва сериозна повреда; трябва да бъде регистриран
- Ниво.ПРЕДУПРЕЖДЕНИЕ: Показва предупредителни съобщения
- Ниво.ИНФОРМАЦИЯ: Информационно съобщение по време на изпълнение
- Ниво.CONFIG: Статични съобщения за конфигурация
- Ниво.ФИН: Проследяване на съобщения
- Ниво.ФИНЕР: Подробно проследяване на съобщения
- Ниво. НАЙ-ФИН: Много подробни проследяващи съобщения
Компоненти за регистриране
Нуждаем се от Logger екземпляр за извършване на всякакъв вид влизане в Java. Този екземпляр е отговорен за регистрирането на данни в LogRecord . LogRecord екземпляри се използват за предаване на заявки за регистриране между регистрационни рамки и отделни манипулатори на регистрационни файлове. Java SE предоставя пет типа вградени манипулатори:StreamHandler , ConsoleHandler , FileHandler , SocketHandler и MemoryHandler . Човек обаче може да създаде нов манипулатор или да разшири един от тях като персонализиране. Манипулаторите определят какво да правят със записа в дневника; например може да се запази в локално хранилище или да се предаде на сървър по мрежа. Java SE също така включва два стандартни формата:SimpleFormatter и XMLFormatter . Тези форматери се използват за форматиране на LogRecord в четим от човека формат и в стандартен XML формат, съответно.
Има LogManager клас, който следи глобалната информация за регистриране, като йерархично пространство от имена на Loggers и набор от контролни свойства за регистриране от конфигурационния файл. Той е от основно значение за влизането в Java и до голяма степен контролира какво да се регистрира, къде да влезе, включително други подробности за инициализация и т.н.
Прост пример за регистриране
Създаване на Logger обектът е много прост. Ето един много прост код, който да илюстрира това.
import java.util.logging.Logger; public class App { private static Logger logger = Logger.getLogger(App.class.getName()); public static void main(String[] args) { logger.info("This is a log message !!!"); logger.info("The name of the logger is " + logger.getName() + " nwhich is same as class name: " + App.class.getName()); } }
Регистратор обектите обикновено се наименуват с помощта на String стойност на йерархично пространство от имена, разделено с точки. В предишния случай е същото като името на класа. Името обаче може да бъде произволна низова стойност, но обикновено имената се основават на името на пакета или името на класа на регистрирания компонент. Възможно е също така да създадете „анонимен” регистратор, който няма да се съхранява в Logger пространство от имена.
Регистриране във външен файл чрез XML форматиране
В следния код регистрационните съобщения се пренасочват към файл с помощта на FileHandler .
Забележка: Файлът ще бъде създаден в директорията на проекта. |
FileHandler може или да пише в определен файл, или може да пише във въртящ се набор от файлове. Въртящият се набор от файлове означава, че по-старите файлове се наименуват чрез добавяне на 0,1,2 и т.н. към основното име на файла. XMLFormatter е форматирането по подразбиране, използвано от FileHandler .
import java.io.IOException; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; public class App { private static FileHandler fileHandler; private static Logger logger = Logger.getLogger(App.class.getName()); public static void main(String[] args) throws IOException { fileHandler = new FileHandler(App.class.getName() + ".log"); logger.setLevel(Level.ALL); logger.addHandler(fileHandler); logger.info("Log message redirected to a file"); logger.info("The name of the logger is " + logger.getName() + " nwhich is same as class name: " + App.class.getName()); } }
Регистриране във външен файл с помощта на персонализирано форматиране
Ще променим малко следния код, за да персонализираме форматирането на съобщението. Това променя начина, по който съобщенията се записват във външния файл.
Забележка: Наблюдавайте съдържанието на регистрационния файл за това как се е променило форматирането. |
import java.io.IOException; import java.util.logging.*; public class App { private static FileHandler fileHandler; private static Logger logger = Logger.getLogger(App.class.getName()); public static void main(String[] args) throws IOException { fileHandler = new FileHandler(App.class.getName() + ".log"); logger.setLevel(Level.ALL); fileHandler.setFormatter(newCustomFormatter()); logger.addHandler(fileHandler); logger.fine("Log message redirected to a file"); logger.finer("The name of the logger is " + logger.getName()); loggerfinest("This is same as class name: " + App.class.getName()); } private static class CustomFormatter extends Formatter { private static final String format = "[%1$tF %1$tT] [%2$-4s] %3$s %n"; public String format(LogRecord record) { returnString.format(format, record.getMillis(), record.getLevel().getLocalizedName(), record.getMessage()); } } }
Това е всичко. Експериментирайте с регистрирането на Java и опитайте много други възможности. Консултирайте се с документите на Java API, където е необходимо.
Други рамки за регистриране в Java
Понякога е удобно да използвате рамка за регистриране на трета страна и има доста популярни, от които да избирате. Например API за регистриране, предоставен от SLF4J, използва прост фасаден модел, който е абстракционен слой, който позволява на приложението да бъде отделено от неговата рамка за регистриране. Log4j е синтактично подобен на вграденото регистриране на Java. Той има конфигурация по подразбиране за извеждане на всички съобщения в журнала към конзолата. Logback е наследник на Log4j и е продължение на своя предшественик. tinyLog е лека рамка за регистриране, която може да се използва както с Java, така и с Android.
Заключение
Процесът на регистриране е проектиран да бъде прост и ефективен при предоставянето на това, което трябва да направи. Възможно е бързо да започнете с API за регистриране в Java. Дизайнът е разширяем и може да бъде персонализиран според крайните нужди на разработчика. Тази статия е поглед върху основите на регистрирането на Java. Много сложни детайли са пропуснати за простота. Проучете документацията на Java API и други подходящи документи за повече подробности относно това.
Препратки
- Общ преглед на регистрацията на Java
- Документация за API на Java