A simple log4j meta-library

Loggable is a Java library to be used in conjunction with the Apache log4j standard logging library.

Its main goal is semplifying the logging process throughout the application, thus reducing the usual declarations overhead due to the log4j library.


A standard call to the log4j library is written this way:

package com.marzapower.test;

import org.apache.log4j.Logger;

public class Log4jCaller {
private static final Logger logger = Logger.getLogger(Log4jCaller.class);

public static void main(String… args) {
logger.debug("A simple log call");

The Loggable meta-library requires a lighter approach:

package com.marzapower.test;

import com.marzapower.loggable.*;

public class LoggableCaller {
public static void main(String… args) {
Log.get().debug("A simple log call");

This definition will have the same effect at runtime. A still valid approach is the following:

package com.marzapower.test;

import com.marzapower.loggable.*;

public class RootLoggerCaller {
public static void main(String… args) {
Log.get().debug("A simple log call");

where the @Loggable annotation is missing. This implementation would be equivalent to the first example, if we changed the logger definition to Logger.getRootLogger() instead of Logger.getLogger(Log4jLogger.class).

How does it work

The Loggable meta-library uses two main elements: the @Loggable annotation and the Log class. The first drives the logging logic of our classes, while the latter is a centralized controller that each class has to call in a static way. While, using only the base log4j library, each class had to define a private org.apache.log4j.Logger instance, and then had to invoke methods on this instance, now each class must be annoted with the @Loggable annotation and must call the Log class directly for logging.

We can increase the ease of implementation of the logging architecture doing the following:

  1. Design an appropriate log4j configuration, so that the root logger can be used equally by each class
  2. Write down the code of the application classes, without using any additional parameter or annotation or private logger instance
  3. Within each class, call Log.get() to retrieve the Logger instance to be used directly.

What will happen is that each class, using this approach, will log using the log4j root logger. We can easily convert this code:

package com.marzapower.test;

import org.apache.log4j.Logger;

public class Log4jCaller1 {
private static final Logger logger = Logger.getRootLogger();
public void log() {
logger.debug("A simple log call");

final class Log4jCaller2 {
private static final Logger logger = Logger.getRootLogger();
public void log() {
logger.debug("A simple log call");

final class Log4jCaller3 {
private static final Logger logger = Logger.getRootLogger();
public void log() {
logger.debug("A simple log call");

into this:

package com.marzapower.test;

import com.marzapower.loggable.Log;

public class LoggableCaller1 {
public void log() {
Log.get().debug("A simple log call");

final class LoggableCaller2 {
public void log() {
Log.get().debug("A simple log call");

final class LoggableCaller3 {
public void log() {
Log.get().debug("A simple log call");

Speed up development time

This meta-library will surely speed up development time. This is true because we no longer have to worry about useless definitions. We can insert that Log.get() call everywhere with no additional effort, and every logging call will succeed. By default in fact, every class can at least log through the root logger.

So, we do not have to worry about the definition of the local logger instance, neither have to worry about deleting this instance when we erase every logging call from our class. If we want our class to log into its dedicated logger, we just have to add the short “@Loggable” annotation before the class definition. If we want to modify the logger for that class, we will just change some parameters passed to the annotation.

A more complex example

This is a more complex example:

package com.marzapower.test;

import com.marzapower.loggable.*;
import com.marzapower.loggable.Loggable.LogLevel;

@Loggable(clazz = MyOtherClass.class, logLevel = LogLevel.ERROR)
public class LoggableComplexCaller {
public void log() {
Log.get().debug("This will never be logged");
Log.get().error("But this surely will!");

@Loggable(loggerName = "myLoggable")
final class MyLoggableCaller {
public void log() {
"A simple log call, " +
"using the myLoggable " +
"logger instance");

@Loggable(exclude = true)
final class LoggableSilentCaller {
public void log() {
Log.get().debug("This will never be logged");

The following will happen:

  1. LoggableComplexCaller will log using the logger instance dedicated to the MyLogger class (the equivalent of Logger.getLogger(MyOtherClass.class)), and only messages whose level is ERROR or higher will be logged
  2. MyLoggableCaller will log using the log4j logger named “myLoggable“, if present in the log4j configuration files
  3. LoggableSilentCaller will never log, since Log.get() will return a silent logger for this class.

Additional info

You can find a detailed introduction and explanation of the Loggable meta-library in these two posts:


All the source code and compiled packages for the Loggable meta-library are hosted on github. Please follow this link to the main project page


v. 1.0.3

  • FIX: A bug in the LoggerContainer class caused an endless loop when asking for a void logger or the root logger

v. 1.0.2

  • FIX: A bug in the LoggerContainer class caused a NullPointerException under certain (rare) circumstances

v. 1.0.1

  • FIX: A bug in the LoggerContainer class caused a stack overflow when calling Log.get()

v. 1.0

  • First official release

Credits and copyright

The Loggable meta-library is released under the GNU Lesser General Public License v. 3.

3.679 thoughts on “Loggable

  1. Heya i’m for the first time here. I came across this board and I find It truly useful & it
    helped me out a lot. I hope to give something back and
    help others like you helped me.

  2. Having read this I thought it was rather enlightening. I appreciate you finding the time and effort to put this short article together. I once again find myself personally spending a significant amount of time both reading and leaving comments. But so what, it was still worthwhile!

  3. It’s genuinely very complicated in this active life
    to listen news on Television, therefore I just use internet for that reason, and
    obtain the most up-to-date news.

  4. Greetings from Los angeles! I’m bored at work so I decided to check out your website on my
    iphone during lunch break. I enjoy the information you
    provide here and can’t wait to take a look when I get home.
    I’m surprised at how quick your blog loaded on my mobile ..
    I’m not even using WIFI, just 3G .. Anyways, good blog!

    my webpage :: m88

  5. May I simply just say what a comfort to discover somebody that truly understands what they’re talking about on the net. You certainly realize how to bring a problem to light and make it important. A lot more people ought to read this and understand this side of the story. It’s surprising you are not more popular given that you surely possess the gift.

  6. Howdy! I could have sworn I’ve been to this web site before but after browsing through some of the articles I realized it’s new to me. Anyhow, I’m definitely happy I came across it and I’ll be bookmarking it and checking back regularly!

  7. I’ll right away grab your rss feed as I can’t in finding
    your e-mail subscription link or e-newsletter service.
    Do you have any? Kindly allow me understand in order
    that I could subscribe. Thanks.

  8. Hello there, just became aware of your blog through Google,
    and found that it’s truly informative. I’m going
    to watch out for brussels. I’ll be grateful if you continue
    this in future. Numerous people will be benefited from your writing.

  9. Thanks for another informative web site. The place else may
    I am getting that type of information written in such an ideal
    approach? I have a mission that I am simply now operating on, and I have been at
    the glance out for such information.

    Also visit my web blog :: nha cai uy tin

  10. خرید بک لینک و پیوند
    بک لینک چیست؟
    لینک و پیوند سازی را میتوان پربحث ترین
    زمینه در بهینه سازی وب سایت دانست و ایده ها
    متضاد اکثری در باب تاثیر خرید بک
    لینک قوی و پیوند بر بهینه سازی وب سایت و راهکار
    اجرای آن موجود هست . در‌این مطلب سعی می‌کنیم نخست
    دریابیم خرید بک لینک حرفه ای و پیوند چه می‌باشد و
    بعداز آن آنالیز کنیم چه تاثیری بر سئوی سایت ما خواهد داشت .

    لینک و پیوند سازی یا این که کسب و خریداری بک لینک ارزان مراحل اخذ پیوند از دیگر وبسایت های اینترنتی برای وبسایت خودمان است .
    مراد ما از لینک و پیوند نوشته یا
    این که تصاویری می باشند که با کلیک
    بر روی آنان استفاده کننده به کاغذ دیگری در وب انتقال می یابد .
    ربات های گوگل فرصت باز نگری یک
    ورقه لینک و پیوند های مو جود در آن را هم
    تحلیل کرده و بدین صفحه ها پیوند شده
    مراجعه می‌نمایند . به همین صورت
    مسیر حرکتی ربات گوگل در وب صورت
    می‌گیرد .

    متن لینک شده یا Anchor Text
    نوشته لینک شده بدین مضمون‌ است که پیوند بر روی چه عبارتی قرار داده
    شده‌است . بعنوان نمونه در پیشین
    همگانی بود که میگفتند “
    برای ورود به تارنما اینجا کلیک نمایید ” و لینک را بر روی کلمه و واژه اینجا قرار میدادند .
    در فعالیت عبارت “ اینجا ” نوشته
    پیوند شده یا این که به عبارتی Anchor Text به
    حساب می‌آید .

    زمانیکه گوگل یک بک پیوند به
    تارنما شمارا تماشا مینماید به انکر تکست اعتنا متعددی
    داشته و عملا قیمت و اعتبار منتقل شده به وب سایت شما درین عبارت خواهد
    بود . در صورتیکه تارنما شما با عبارت
    “ کتاب ” پیوند شده باشد منزلت شما وقتی
    که یک استفاده کننده در گوگل عبارت کتاب را کاوش می نماید خوبتر خواهد شد
    البته در صورتی‌که این لینک با عبارت “
    گوشی ” ساخت شده باشد منزلت شما در عبارت “
    گوشی ” بهبود خواهد یافت .

    خرید بک لینک از دید گوگل
    نسبتاً تمام وبمستران فعلا از
    تاثیر منفی خرید بک لینک بر سئوی وب سایت و کسب لینک و پیوند های متعددی و نامطلوب آگاه می‌باشند .
    یکی‌از سوال های رایجی که خواننده
    گان وبلاگ مطرح می‌نمایند این است که
    , “ خرید بک لینک و پیوند از وب سایت های با پیج رنک بالا
    چه تاثیری دارد؟ گوگل چه‌گونه متوجه مبلغی
    بودن آن خواهد شد؟ ”

    جواب به‌این سوال عمل فراوان
    راحتی است , خرید بک پیوند فعالیت صدق نیست!
    در صورتی‌که بدنبال کسب مقام مطلوب در حاصل گوگل می باشید و طرح
    ریزی دراز مدتی برای عمل خویش دارید ,
    خرید بک پیوند رویه قابل قبولی نمیباشد چون
    احتمال دارد شما‌را با اشتباهات دور از شوخی نظیر جریمه وبسایت بوسیله گوگل در آتی روبرو نماید .

    به لهجه بی آلایش , گوگل خرید بک لینک تضمینی و پیوند را بعنوان یک رای مثبت از سمت
    یوزرها یا این که وب سایت های دیگر
    به کاغذ یا این که تارنما شما می شناسد .
    با کسب رای بیش تر شما بخت برد در همه پرسی گوگل
    را خواهید داشت . گوگل صراحتا اعلام کرده
    که خرید بک لینک و پیوند برخلاف سیاست های این وب سایت بوده و تخلف شناخته میشود .
    خلل از جایی آغاز می شود که یوزرها فکر‌می‌کنند با خرید رای می توانند موتور کاوش را فریب
    داده و در‌این همه پرسی غالب باشند اما تحلیل گوگل بر خرید بک لینک و
    پیوند زیاد پیچیده و قادر است

    Review my web site; خرید بک لینک هرمی

  11. وب سایت های زیادی هستند که در زمینه انتشار موزیک های ایرانی
    و خارجی فعالیت می کنند، اما بسیاری از آن ها پس از
    مدتی دچار مشکلات زیادی خواهند شد،
    احتمالا شما هم هنگام دانلود آهنگ جدید از سایت های ایرانی با تبلیغات پرتعداد روبرو خواهید شد، هر چه به
    دنبال لینک دانلود هستید به هدفتان نمی رسید.
    در این وضعیت احتمالا کلافه شده و
    سایت را ترک می کنید و به سراغ لینک های دیگر می روید.

    اگر از این وضعیت خسته شده اید
    و می خواهید تمامی موزیک های روز را به صورت
    یکجا دانلود کنید صفحه اصلی گلسارموزیک هم اکنون در دسترس شماست.

  12. I blog frequently and I really appreciate your information. This great article has really peaked my interest. I am going to take a note of your website and keep checking for new details about once per week. I subscribed to your Feed too.

  13. {Oneida Kahler|Danny Willis|Darline Kunst|Marlyn Deveaux|Anastacia Griest|Marcel Stahr|Kary Oh|Lecia Effler|Sheree Alaimo|Isa Soni|Idell Rodrigues|Ashely Moen|Jermaine Donovan|Gillian Pintor|Marylouise Hasegawa|Rosemarie Orduno|Teodoro Marenco|Leticia Gaccione|Shemika Lipsett|Sherrill Zabel|Olin Flink|Buddy Kirst|Emmie Robitaille|Georgine Jasso|Georgette Loiacono|Carly Landrum|Mariann Mcdavis|Renda Ruddock|Mitch Comfort|Domenica Mijares|Inocencia Blaker|Nery Gail|Estefana Hermsen|Serina Mealy|Bunny Benard|Ping Geyer|Wanda Kuehn|Kimberlee Rux|Abe Pietrowski|Cornell Rumph|Man Manson|Maxie Wingham|Felisha Laduke|Venessa Smidt|Markus Guinan|Benjamin Mcnichols|Merrie Patrick|Sylvester Alvord|Nevada Goold|Dwayne Olander|Deidre Gibson|Jenise Pero|Jed Istre|Randi Farone|Susanne Seawright|Shanta Shaddix|Agueda Heidecker|Lakiesha Browner|Colby Archie|Kristian Silverio|Thuy Wiseley|Leora Adkisson|Damien Hayward|Hye Carle|Cristobal Sane|Margeret Almond|Gregoria Rosner|Verlene Gunnells|Madlyn Spann|Cleora Pilling|Denna Seeger|Youlanda Kahan|Leila Sandor|Elmira Alcantara|Latoya Kollar|Meri Weigand|Raphael Pease|Dusty Sitzes|Marcella Cogburn|Delma Christiansen|Zack Voris|Alyce Lemus|Malisa Shrum|Krissy Lehmkuhl|Alyson Swopes|Johnna Nunnally|Arletha Alldredge|Bronwyn Hoye|Carlyn Nicastro|Mirian Dressel|Janeth Zeman|Beatriz Vandeusen|Monroe Benigno|Roselle Prost|Codi Broaddus|Josiah Klem|Chrissy Bowlby|Kaila Brockman|Maria Mattioli|Kourtney Blay|Rosina Howser|Vi Mcspadden|Armand Nordberg|Hilde Muniz|Dakota Lynch|Sidney Veit|Keeley Frederic|Stanley Shao|Jessenia Beede|Shona Powe|Aletha Lish|Estella Matchett|Angeline Debartolo|Julio Ramos|Eladia Pertuit|Tonda Sloss|Trinity Wilderman|Tracie Brinkley|Dulcie Riffle|Adelaida Pillot|Katelin Vanzile|Leighann Deines|Maegan Mcevoy|Tiny Dahle|Lawanda Billick|Teofila Yetman|Erminia Deer|Brigitte Opp|Fred Block|Dwain Bibb|Moises Schrage|Branda Mariscal|Becki Hammers|Inger Ramaker|Rosanne Peele|Vincent Lesane|Stephaine Chalfant|Randal Ousley|Sebrina Weiss|Exie Strobl|Tangela Allman|Fermina

    Saved as a favorite, I like your website.

  14. Hey there! I know this is kinda off topic but I was wondering which blog platform
    are you using for this site? I’m getting sick and tired of
    Wordpress because I’ve had issues with hackers and I’m looking at alternatives for another platform.
    I would be great if you could point me in the direction of
    a good platform.

    Also visit my blog post – 188bet

  15. hello there and thank you for your info – I’ve
    certainly picked up anything new from right here. I did however expertise some technical points using this site, since I
    experienced to reload the website lots of times previous to I could get it to load correctly.
    I had been wondering if your web host is OK?
    Not that I’m complaining, but sluggish loading instances times will sometimes affect your placement in google
    and could damage your high quality score if ads and marketing with Adwords.

    Well I’m adding this RSS to my email and can look out for
    much more of your respective fascinating content.
    Ensure that you update this again soon.

    My web blog; 188bet

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *