{"id":563,"date":"2011-09-13T20:05:00","date_gmt":"2011-09-13T20:05:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/the-java-logging-mess.html"},"modified":"2012-10-21T20:16:41","modified_gmt":"2012-10-21T20:16:41","slug":"java-logging-mess","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html","title":{"rendered":"The Java Logging Mess"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">Every application needs logging. And right now there are a lot of  options on what exactly to use for logging in Java. The most famous  frameworks are: log4j, logback, commons-logging, slf4j,  java.util.logging. And there are a lot more \u2013 every now and then someone  decides to write his own logger \u2013 just go to the Open Type dialog of  your IDE and type \u201cLogger\u201d (not to mention that some use the name  \u201cLog\u201d). And there\u2019s also the ServletContext.log(..) and stuff like that.  It is indeed a mess. But let\u2019s start with some history (note: here\u2019s <a href=\"http:\/\/blog.frankel.ch\/thoughts-on-java-logging-and-slf4j\">another post<\/a> on the topic) .<\/p>\n<p>First there was System.out and System.err. But they were inflexible,  so a need for a feature-rich logging has arisen (note that I was in  elementary school at that time). Logging that can be customized format,  that can go to multiple targets \u2013 files, consoles, emails, etc. So log4j  has appeared \u2013 <a href=\"http:\/\/logging.apache.org\/log4j\/1.2\/changes-report.html\">in 1999<\/a>.<\/p>\n<p>But other solutions spawned as well, including java.util.logging \u2013 an  attempt to have standard JDK logging. Note a very successful attempt,  as it turned out. java.util.logging appeared with JDK 1.4 in the  beginning of 2002. A few months later the realized need for a common  logging interface for all existing loggers resulted in <a href=\"http:\/\/commons.apache.org\/logging\/\">apache common-logging<\/a>.<\/p>\n<p>The idea of commons-logging was viable \u2013 libraries should not force a  particular logging implementation on applications that use them. So  each logging implementation gets adapted to a common API which is used  by the library \u2013 so your library does not use org.apache.log4j.Logger \u2013  it uses org.apache.commons.logging.Log, and it delegates to whatever  logging framework exists on the classpath. That way your project can use  multiple libraries and use a single logging configuration for all of  them.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>But commons-logging was not good enough. <a href=\"http:\/\/tapestryjava.blogspot.com\/2007\/08\/so-long-commons-logging-hello-slf4j.html\">People say<\/a> that it has caused more problems than it has solved. So the author of log4j \u2013 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Ceki_G%C3%BClc%C3%BC\">Ceki G\u00fclc\u00fc<\/a> created a new project \u2013 slf4j (Simple Logging Facade for Java) <a href=\"http:\/\/www.slf4j.org\/news.html\">in 2005<\/a>. It aims to be a better commons-logging.<\/p>\n<p>Log4j has been widely used since 1999, but it was not good enough, so  guess who created a new project \u2013 logback. It was Ceki G\u00fclc\u00fc again. Why  a new project? Well, combination of political reasons and old code base  that needs replacing from the ground, I guess. Anyway, logback appeared  in 2006. How it is better than log4j? Ceki <a href=\"http:\/\/logback.qos.ch\/reasonsToSwitch.html\">explains here<\/a>.<\/p>\n<p>So back to present day \u2013 there are a lot of logging frameworks and  two facades \u2013 commons-logging and slf4j. Every library uses a different  one, and it\u2019s a mess. Version mismatches, tons of Logger classes on the  classpath. Maven succeeds at making this simpler by at least not  allowing multiple versions of the same logging implementation, but  that\u2019s it. And if you don\u2019t know all the history above and which  framework is used for what, it is likely for your project to suffer from  that mess.<\/p>\n<p>What\u2019s the solution? The simplest thing is to use slf4j and logback. Why?<\/p>\n<ul>\n<li>slf4j has bridges for many existing implementations. This means that  you remove the log4j.jar and use the log4j-over-slf4j.jar \u2013 it has the  same classes in the same package, only the implementation differs \u2013 it  delegates to the current slf4j implementation in use. That way all  libraries that use log4j (or any other bridged implementation) will work  with your logback configuration. Unfortunately this doesn\u2019t work quite  well with java.util.logging, so you have to hope not to have too many  libraries that have decided on a \u201cminimal dependency footprint\u201d.<\/li>\n<li>logback is better than log4j (same author \u2013 newer implementation, learning from previous mistakes)<\/li>\n<li>if a better framework than logback appears you can easily switch to it without changing your classes.<\/li>\n<\/ul>\n<p>And finally, a word about the logging configuration. It should be  external, in the same way (and the same location, preferably) as the  other <a href=\"http:\/\/techblog.bozho.net\/?p=483\">externalized project configurations<\/a>. You should then load it based on a system \u201cconfig.location\u201d property.<\/p>\n<p>(In a spring-based web-application there is <code>Log4jWebConfigurer<\/code>, but there isn\u2019t <code>LogbackWebConfigurer<\/code>.  Luckily, it is simple to write, and there are some existing  implementations that are based on the log4j one. In your web.xml the <code>logbackConfigLocation<\/code> param should be: <code>file:\/\/${config.lotation}\/logback.xml<\/code>)<\/p>\n<p>Why something so simple became so complicated? Because it isn\u2019t  simple. There are too many factors that were not taken into account in  the beginning, so they needed to be rectified later. It\u2019s a good thing  that there hasn\u2019t been a major change in the field since 2006, so we can  consider things stable. <\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/techblog.bozho.net\/?p=503\">The Logging Mess<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Bozhidar Bozhanov at the <a href=\"http:\/\/techblog.bozho.net\/\">Bozho&#8217;s tech blog<\/a>. <\/p>\n<p><strong><i>Related Articles :<\/i><\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2011\/01\/10-tips-proper-application-logging.html\">10 Tips for Proper Application Logging<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2010\/12\/things-every-programmer-should-know.html\">Things Every Programmer Should Know<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/p\/java-tutorials.html\">Java Tutorials and Android Tutorials list<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2011\/09\/how-to-solve-production-problems.html\">How to solve production problems<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2011\/07\/top-97-things-every-programmer-or.html\">The top 9+7 things every programmer or architect should know<\/a> <\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Every application needs logging. And right now there are a lot of options on what exactly to use for logging in Java. The most famous frameworks are: log4j, logback, commons-logging, slf4j, java.util.logging. And there are a lot more \u2013 every now and then someone decides to write his own logger \u2013 just go to the &hellip;<\/p>\n","protected":false},"author":55,"featured_media":148,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[132],"class_list":["post-563","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-core-java","tag-logging"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Java Logging Mess - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Every application needs logging. And right now there are a lot of options on what exactly to use for logging in Java. The most famous frameworks are:\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Java Logging Mess - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Every application needs logging. And right now there are a lot of options on what exactly to use for logging in Java. The most famous frameworks are:\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2011-09-13T20:05:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-21T20:16:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Bozhidar Bozhanov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bozhidar Bozhanov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html\"},\"author\":{\"name\":\"Bozhidar Bozhanov\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/1eaacbb8d159c99fd32e6b51198a1e79\"},\"headline\":\"The Java Logging Mess\",\"datePublished\":\"2011-09-13T20:05:00+00:00\",\"dateModified\":\"2012-10-21T20:16:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html\"},\"wordCount\":821,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"keywords\":[\"Logging\"],\"articleSection\":[\"Core Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html\",\"name\":\"The Java Logging Mess - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"datePublished\":\"2011-09-13T20:05:00+00:00\",\"dateModified\":\"2012-10-21T20:16:41+00:00\",\"description\":\"Every application needs logging. And right now there are a lot of options on what exactly to use for logging in Java. The most famous frameworks are:\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/09\\\/java-logging-mess.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Core Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/core-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"The Java Logging Mess\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/1eaacbb8d159c99fd32e6b51198a1e79\",\"name\":\"Bozhidar Bozhanov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"caption\":\"Bozhidar Bozhanov\"},\"description\":\"Senior Java developer, one of the top stackoverflow users, fluent with Java and Java technology stacks - Spring, JPA, JavaEE, as well as Android, Scala and any framework you throw at him. creator of Computoser - an algorithmic music composer. Worked on telecom projects, e-government and large-scale online recruitment and navigation platforms.\",\"sameAs\":[\"http:\\\/\\\/techblog.bozho.net\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/bozhidar-bozhanov\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Java Logging Mess - Java Code Geeks","description":"Every application needs logging. And right now there are a lot of options on what exactly to use for logging in Java. The most famous frameworks are:","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html","og_locale":"en_US","og_type":"article","og_title":"The Java Logging Mess - Java Code Geeks","og_description":"Every application needs logging. And right now there are a lot of options on what exactly to use for logging in Java. The most famous frameworks are:","og_url":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2011-09-13T20:05:00+00:00","article_modified_time":"2012-10-21T20:16:41+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","type":"image\/jpeg"}],"author":"Bozhidar Bozhanov","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Bozhidar Bozhanov","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html"},"author":{"name":"Bozhidar Bozhanov","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/1eaacbb8d159c99fd32e6b51198a1e79"},"headline":"The Java Logging Mess","datePublished":"2011-09-13T20:05:00+00:00","dateModified":"2012-10-21T20:16:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html"},"wordCount":821,"commentCount":2,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","keywords":["Logging"],"articleSection":["Core Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html","url":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html","name":"The Java Logging Mess - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","datePublished":"2011-09-13T20:05:00+00:00","dateModified":"2012-10-21T20:16:41+00:00","description":"Every application needs logging. And right now there are a lot of options on what exactly to use for logging in Java. The most famous frameworks are:","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2011\/09\/java-logging-mess.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Core Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/core-java"},{"@type":"ListItem","position":4,"name":"The Java Logging Mess"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/1eaacbb8d159c99fd32e6b51198a1e79","name":"Bozhidar Bozhanov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","caption":"Bozhidar Bozhanov"},"description":"Senior Java developer, one of the top stackoverflow users, fluent with Java and Java technology stacks - Spring, JPA, JavaEE, as well as Android, Scala and any framework you throw at him. creator of Computoser - an algorithmic music composer. Worked on telecom projects, e-government and large-scale online recruitment and navigation platforms.","sameAs":["http:\/\/techblog.bozho.net\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/bozhidar-bozhanov"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/563","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=563"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/563\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=563"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=563"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}