{"id":1346,"date":"2015-09-09T16:34:12","date_gmt":"2015-09-09T14:34:12","guid":{"rendered":"http:\/\/blog.rabahi.net\/?page_id=1346"},"modified":"2017-05-10T22:09:15","modified_gmt":"2017-05-10T20:09:15","slug":"java-loggerfactory","status":"publish","type":"page","link":"https:\/\/blog.rabahi.net\/?page_id=1346","title":{"rendered":"Java &#8211; Logger"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#Configure_logback\"><span class=\"toc_number toc_depth_1\">1<\/span> Configure logback<\/a><ul><li><a href=\"#Add_the_logger_dependency\"><span class=\"toc_number toc_depth_2\">1.1<\/span> Add the logger dependency<\/a><ul><li><a href=\"#If_you_use_maven_to_your_pomxml\"><span class=\"toc_number toc_depth_3\">1.1.1<\/span> If you use maven, to your pom.xml<\/a><\/li><\/ul><\/li><li><a href=\"#Set_logbackxml\"><span class=\"toc_number toc_depth_2\">1.2<\/span> Set logback.xml<\/a><\/li><\/ul><\/li><li><a href=\"#Levels\"><span class=\"toc_number toc_depth_1\">2<\/span> Levels<\/a><\/li><li><a href=\"#Manage_loggers\"><span class=\"toc_number toc_depth_1\">3<\/span> Manage loggers<\/a><ul><li><a href=\"#List_categories\"><span class=\"toc_number toc_depth_2\">3.1<\/span> List categories<\/a><\/li><li><a href=\"#CreateUpdate_logger_level\"><span class=\"toc_number toc_depth_2\">3.2<\/span> Create\/Update logger level<\/a><\/li><li><a href=\"#Read_logger_level\"><span class=\"toc_number toc_depth_2\">3.3<\/span> Read logger level<\/a><\/li><li><a href=\"#Delete_logger_level\"><span class=\"toc_number toc_depth_2\">3.4<\/span> Delete logger level<\/a><\/li><\/ul><\/li><\/ul><\/div>\n<h1><span id=\"Configure_logback\">Configure logback<\/span><\/h1>\n<h2><span id=\"Add_the_logger_dependency\">Add the logger dependency<\/span><\/h2>\n<h3><span id=\"If_you_use_maven_to_your_pomxml\">If you use maven, to your pom.xml<\/span><\/h3>\n<pre lang=\"xml\">\r\n  <dependency>\r\n    <groupId>ch.qos.logback<\/groupId>\r\n    <artifactId>logback-classic<\/artifactId>\r\n    <version>${logback.version}<\/version>\r\n  <\/dependency>\r\n<\/pre>\n<h2><span id=\"Set_logbackxml\">Set logback.xml<\/span><\/h2>\n<p>Create the following file : <strong>src\/main\/resources\/logback.xml<\/strong><\/p>\n<pre lang=\"xml\">\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<!DOCTYPE xml>\r\n<configuration>\r\n  <appender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAppender\">\r\n    <layout class=\"ch.qos.logback.classic.PatternLayout\">\r\n      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n\r\n      <\/Pattern>\r\n    <\/layout>\r\n  <\/appender>\r\n\r\n  <logger name=\"net.rabahi\" level=\"TRACE\" \/>\r\n  <logger name=\"net.rabahi.logger\" level=\"TRACE\" \/>\r\n\r\n  <appender name=\"FILE\" class=\"ch.qos.logback.core.rolling.RollingFileAppender\">\r\n    <file>target\/logger.log<\/file>\r\n    <encoder class=\"ch.qos.logback.classic.encoder.PatternLayoutEncoder\">\r\n      <Pattern>\r\n\t%d{yyyy-MM-dd HH:mm:ss} - %msg%n\r\n      <\/Pattern>\r\n    <\/encoder>\r\n\t\t\r\n    <rollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\">\r\n      <!-- rollover daily -->\r\n      <fileNamePattern>\r\n         .\/target\/logger.%d{yyyy-MM-dd}.%i.log\r\n      <\/fileNamePattern>\r\n      <timeBasedFileNamingAndTriggeringPolicy\r\n\t  class=\"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP\">\r\n\t  <maxFileSize>10MB<\/maxFileSize>\r\n      <\/timeBasedFileNamingAndTriggeringPolicy>\r\n    <\/rollingPolicy>\r\n\t\t\r\n  <\/appender>\r\n\r\n  <root level=\"debug\">\r\n    <appender-ref ref=\"STDOUT\" \/>\r\n    <appender-ref ref=\"FILE\" \/>\r\n  <\/root>\r\n<\/configuration>\r\n<\/pre>\n<h1><span id=\"Levels\">Levels<\/span><\/h1>\n<p>Loggers have different levels : TRACE < DEBUG < INFO < WARN < ERROR\n<br clear=\"all\"><br \/>\n<\/p>\n<p>For each of these level, you can call them like this :<\/p>\n<pre lang=\"java\">\r\n\/\/ TRACE\r\nLOGGER.trace(message);\r\nLOGGER.trace(message, throwable);\r\n\r\n\/\/ DEBUG\r\nLOGGER.debug(message);\r\nLOGGER.debug(message, throwable);\r\n\r\n\/\/ INFO\r\nLOGGER.info(message);\r\nLOGGER.info(message, throwable);\r\n\r\n\/\/ WARN\r\nLOGGER.warn(message);\r\nLOGGER.warn(message, throwable);\r\n\r\n\/\/ ERROR\r\nLOGGER.error(message);\r\nLOGGER.error(message, throwable);\r\n<\/pre>\n<p>Also, you can check if level are enabled<\/p>\n<pre lang=\"java\">\r\n\/\/ TRACE\r\nLOGGER.isTraceEnabled();\r\n\r\n\/\/ DEBUG\r\nLOGGER.isDebugEnabled();\r\n\r\n\/\/ INFO\r\nLOGGER.isInfoEnabled();\r\n\r\n\/\/ WARN\r\nLOGGER.isWarnEnabled();\r\n\r\n\/\/ ERROR\r\nLOGGER.isErrorEnabled();\r\n<\/pre>\n<h1><span id=\"Manage_loggers\">Manage loggers<\/span><\/h1>\n<h2><span id=\"List_categories\">List categories<\/span><\/h2>\n<p>To get all the loggers :<\/p>\n<pre lang=\"java\">\r\nLoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();\r\nList<ch.qos.logback.classic.Logger> loggers = lc.getLoggerList();\r\n<\/pre>\n<p>To get loggers with only defined level :<\/p>\n<pre lang=\"java\">\r\n\/\/ Get all loggers\r\nLoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();\r\nList<ch.qos.logback.classic.Logger> loggers = lc.getLoggerList();\r\n\r\nList<ch.qos.logback.classic.Logger> result = new LinkedList<>();\r\n\r\nfor(ch.qos.logback.classic.Logger logger : loggers) {\r\n\tif(logger.getLevel() != null) {\r\n\t\tresult.add(logger);\r\n\t}\r\n}\r\n\r\n\/\/ result list contains only loggers with defined level.\r\n<\/pre>\n<h2><span id=\"CreateUpdate_logger_level\">Create\/Update logger level<\/span><\/h2>\n<p>From class:<\/p>\n<pre lang=\"java\">\r\nLoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();\r\nch.qos.logback.classic.Logger logger = lc.getLogger(clazz);\r\nlogger.setLevel(newLevel);\r\n<\/pre>\n<p>From name:<\/p>\n<pre lang=\"java\">\r\nLoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();\r\nch.qos.logback.classic.Logger logger = lc.getLogger(name);\r\nlogger.setLevel(newLevel);\r\n<\/pre>\n<h2><span id=\"Read_logger_level\">Read logger level<\/span><\/h2>\n<p>From class:<\/p>\n<pre lang=\"java\">\r\nLoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();\r\nch.qos.logback.classic.Logger logger = lc.getLogger(clazz);\r\nlogger.getLevel();\r\n<\/pre>\n<p>From name:<\/p>\n<pre lang=\"java\">\r\nLoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();\r\nch.qos.logback.classic.Logger logger = lc.getLogger(name);\r\nlogger.getLevel();\r\n<\/pre>\n<h2><span id=\"Delete_logger_level\">Delete logger level<\/span><\/h2>\n<p>From class:<\/p>\n<pre lang=\"java\">\r\nLoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();\r\nch.qos.logback.classic.Logger logger = lc.getLogger(clazz);\r\nlogger.setLevel(null);\r\n<\/pre>\n<p>From name:<\/p>\n<pre lang=\"java\">\r\nLoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();\r\nch.qos.logback.classic.Logger logger = lc.getLogger(name);\r\nlogger.setLevel(null);\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 Configure logback1.1 Add the logger dependency1.1.1 If you use maven, to your pom.xml1.2 Set logback.xml2 Levels3 Manage loggers3.1 List categories3.2 Create\/Update logger level3.3 Read logger level3.4 Delete logger level Configure logback Add the logger dependency If you use maven, to your pom.xml ch.qos.logback logback-classic ${logback.version} Set logback.xml Create the following file : src\/main\/resources\/logback.xml %d{HH:mm:ss.SSS} [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1538,"menu_order":8,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1346","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1346"}],"version-history":[{"count":24,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1346\/revisions"}],"predecessor-version":[{"id":1955,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1346\/revisions\/1955"}],"up":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1538"}],"wp:attachment":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}