Я использую log4j впервые в проекте. Такой же программист сказал мне то использование System.out.println
считается плохим стилем и что log4j - что-то как стандарт для входа вопросов в наше время.
Мы делаем много JUnit, тестирующих - System.out
материал оказывается более твердым протестировать.
Поэтому я начал использовать log4j для Консольного класса контроллера, это просто обрабатывает параметры командной строки.
// log4j logger config
org.apache.log4j.BasicConfigurator.configure();
Logger logger = LoggerFactory.getLogger(Console.class);
Category cat = Category.getRoot();
Кажется, работает:
logger.debug("String");
Производит:
1 [main] DEBUG project.prototype.controller.Console - String
Я получил два вопроса относительно этого:
Регистратор дает возможность определять разные уровни важности регистрируемых сообщений и возможность использовать разные приемники для вывода - консоль, файл и т. Д.
Также легко включить или отключить только некоторые типы сообщений при использовании регистратора - например, вы не хотите видеть каждое сообщение отладки в производственной среде.
Я не думаю, что использование логгеров дает какие-либо существенные преимущества в модульных тестах, но в любом случае я бы предпочел их даже там. В модульных тестах меня обычно беспокоят утверждения.
Кстати, вам действительно стоит подумать об использовании чего-то вроде Commons Logging или SLF4J в качестве фасада структуры журнала - это плохой стиль - привязывать ваш код к определенной структуре ведения журнала. Common Logging и SLF4J упрощают переключение фреймворков журналирования, если вы захотите.
Все, что вы печатаете в System.out, будет "стандартным", и хотя вы можете перенаправить стандартный вывод в файл и сравнить его, что имеет вы, это очень негибкий. Кроме того, вы не можете фильтровать то, что идет к стандартному выходу, если вы используете System.out ... все будет напечатано. С помощью log4j вы можете установить разные уровни ведения журнала, чтобы сообщения журнала, которые ниже определенного порога серьезности / важности, не печатались (например, если вы измените уровень ведения журнала на WARN, то сообщения DEBUG и INFO больше не будут отображаться).
Кроме того, log4j позволяет управлять ведением журнала для каждого класса, тогда как System.out можно контролировать только на уровне детализации всего приложения (если вы перенаправляете System.out, вы перенаправляете его на всю программу). Напротив, каждому регистратору в log4j может быть назначен другой аппендер. Кроме того, вы можете предоставить регистратору log4j несколько дополнений (например, для работы с системным регистратором и по сети). Вы даже можете добавить логгер log4j к StringBuilder, чтобы вы могли легко читать то, что было написано. И хотя System.out может быть перенаправлен, это перенаправление имеет тенденцию быть довольно ограниченным; System.out можно перенаправить в файл или в канал (в другую программу), но, например, вы не сможете перенаправить его на URL-адрес; Напротив, было бы очень легко создать приложение, которое передает сообщения журнала с помощью HTTP POST.
Используйте, например,
org.apache.log4j.BasicConfigurator.configure (new FileAppender (
new PatternLayout ("% d {ISO8601}% -5p% t:% m% n"), // см., Например, http: / /en.wikipedia.org/wiki/Log4j#TTCC
"log / mainWhatever.log"));
Использование logger.setLevel (...)
вы можете легко выбрать, отображать ли сообщения logger.debug (..)
, например установите его на уровень предупреждения, и любые операторы трассировки, отладки и информации не будут печататься. Это избавляет вас от необходимости комментировать только иногда необходимые отладочные операторы.
Также посмотрите Википедию .