메뉴 닫기

Log4Net 설정 방법

java 내에 동작하는 각종 Log 내용을 쌓기 위한 모듈인데, 내부적으로 어떠한 설계로 구성되었는지는 살펴보지 않아, 잘은 모르지만, 성능적 저하 없이 많은 양의 Log 관리에 훌륭하게 대처 할 수 있다. 또, Log로 남겨지는 형태를 단순 Text 파일 형식에서 부터 DB 파일까지 그 대응적 능력이 우수하다.
.NET 프로그램에서도 이 강력한 log4j를 사용할 수 있는데, 그 도구가 바로 log4net 이다. ( http://logging.apache.org/log4net/ )
여기에 쓸 내용은 지금까지 Application 내에 적용하면서 진행되었던 사항들을 적용 순서 대로 나열할 예정이다. 그래서 그 순서가 log4net에 대한 기초와는 다르다. 그러다 보니, 독자가 현재 적용 중인 Project나 구성과는 사뭇 다를 수 있으며, 스스로 잘못 이해한 부분으로 인한 오류도 있다.
더욱이 Web-Base가 아닌 WinForm-Base로 제작하면서 익힌 기능이다 보니, Web 기반의 구성과 일부 차이가 발생할 수 도 있다. 이점을 이해하면서 살펴보면 좋을 것 같다. 또, 이 글 외에도 많은 log4net에 대한 예제, 구성 이야기들을 살펴볼 수 있으므로, 사뭇 달라도, 자신의 적용과 유사한 다른 글들을 찾아보기도 쉬울 것이다.

log4net 접근 시작

최초에는 독자적으로 log 파일을 쌓고 구성했다. 그런데, 문제는 Single Thread 기반의 Application이다 보니, 로그 쌓는데, 의외로 많은 Process Time을 잡아 먹는 문제점이 발생했다. 로그는 좀 더 Detail 하게 쌓고 싶었지만, 그 성능적 문제로 인해 log를 쌓기에 두려움까지 얻게 되었다.
그러다가, java 관련 프로젝트를 수행하면서 log4j 에 대한 접근을 좀 하고 나니, log 쌓는 작업에 대한 대치성에 대해서 고민하게 되었고, 잠시 짬을 두어 log4net을 살펴보았다.
오픈 소스다 보니, 소스 자체를 공개하고 있으며, 다양한 Platform에 대한 컴파일이 이미 되어 있어, 사실 자신이 원하는 프로젝트에 대한 Platform에 맞추어 미리 컴파일된 버전을 바로 연결해서 사용가능 하다.
http://logging.apache.org/log4net/download_log4net.cgi 에서 다운로드 페이지 내에, Binaries 중,
log4net-1.2.13-bin-newkey.zip 을 다운 받았다. 그 안을 열면 여러가지 폴더가 있는데, bin 폴더에 들어가, 자신의 .NET Framework 버전에 맞추어 들어가면, log4net.dll 이 있는데, 이 파일만 꺼내오면 된다.

이제 자신의 Project 내에 저 파일을 복사( 개인적으로는 Solution 폴더 바로 아래에 Assembly 폴더를 만들어서 그 안에 복사) 해준다.

이제 자신의 프로젝트에 참조를 건다.


참조 건 뒤에 빌드 할 때 마다 파일이 복사되서 전달 될 수 있도록 Copy Local 이 True인지도 살펴본다.
(간혹 이 부분을 누락해서, 배포할 때, DLL이 빠져서 실제 이 배포본을 받는 사람은 실행이 안되는 문제가 발생하기도 한다.)

그리고 로그를 쌓는 로직을 작성한다.
그리고 이제 소스 상에서 다음과 같이 추가한다.
여기서는 제일 만만한 Form1.cs 파일을 열고 수정한다.
최초로 열면 아래와 같은 소스이다.

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace MyTestProject
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         public Form1()
  14.         {
  15.             InitializeComponent();
  16.         }
  17.     }
  18. }

이제 이 소스를 다음과 같이 수정한다.

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace MyTestProject
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  14.         public Form1()
  15.         {
  16.             log.Info(“Form Init Start”);
  17.             InitializeComponent();
  18.             log.Info(“Form Init End”);
  19.         }
  20.     }
  21. }

이제 프로젝트를 실행해보자.
분명 로그를 쌓으라고는 했으나, 로그가 쌓이지는 않는다. 당연하다.
로그를 쌓기 위한 log 개체는 만들었다.

  1. private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

하지만, 위의 개체에다 아무리 로그를 쌓으라고 해도 어디다가 어떻게 쌓아야 될지에 대한 설정이 없으므로 쌓일리 없다.
즉 로그가 모두 무시되는 상황. 이를 위해서 설정을 해주어야 한다.
이 설정 방법은 크게 두 가지가 있는데, 하나는 정적인 방법이고, 다른 하나는 동적인 방법이다.
그 방법이 아래와 같다.

로그 쌓기 설정 그 방법 1.

구글을 통해 이런 저런 설정 관련 예제를 받으면 대부분은 .config 파일에다 그 설정을 넣는 방법을 제공한다.
즉 응용 프로그램 프로젝트의 경우 App.config 파일이 그 해당 파일인데 응용 프로그램 프로젝트를 최초로 만들 때는 없는 경우가 많다. 그 경우 새 항목을 추가해서 새로 만들어 주도록 한다.


이제 App.config 파일을 열어보면, 설정을 위한 XML 파일이 열린다.

  1. <?xml version=“1.0” encoding=“utf-8” ?>
  2. <configuration?>
  3. </configuration?>

이 안을 다음과 같이 설정한다.

  1. <?xml version=“1.0” encoding=“utf-8” ?>
  2. <configuration?>
  3.   <configsections?>
  4.     <section name=“log4net” type=“log4net.Config.Log4NetConfigurationSectionHandler, log4net” /?>
  5.   </configsections?>
  6.   <log4net?>
  7.     <appender name=“RollingFile” type=“log4net.Appender.RollingFileAppender”?>
  8.       <file value=“example.log” /?>
  9.       <appendtofile value=“true” /?>
  10.       <maximumfilesize value=“100KB” /?>
  11.       <maxsizerollbackups value=“2” /?>
  12.       <layout type=“log4net.Layout.PatternLayout”?>
  13.         <conversionpattern value=“%level %thread %logger – %message%newline” /?>
  14.       </layout?>
  15.     </appender?>
  16.     <!– Set root logger level to DEBUG and its only appender to A1 —?>
  17.     <root?>
  18.       <level value=“INFO” /?>
  19.       <appender-ref ref=“RollingFile” /?>
  20.     </root?>
  21.   </log4net?>
  22. </configuration?>

그리고 Properties 폴더를 열고, AssemblyInfo.cs 파일을 연다.

이제 맨 아래 줄에다가, 다음 줄을 삽입한다.

  1. [assembly: log4net.Config.XmlConfigurator(Watch = true)]

앞에서 로그 쌓는 로직이 정상적으로 작성되어 있다면, 이제 다시 프로젝트를 실행해보자.
실행 한 뒤에 Build 결과물 폴더를 열어보면 example.log 라는 파일이 생성되는데 그 안에 보면,
Form Init Start와 Form Init End가 보일 것이다.


설정이야 어쨌던 로그가 쌓인다.

로그 쌓기 그 방법 2

대부분의 경우는 위의 경우에 다 처리 될 수 있다. (상세 설정은 추가적인 검색을 하면 상세한 설정이 가능하다.)
그런데, 이런 저런 프로젝트에 적용하다가 보니, 이 로그 설정을 동적으로 설정해야 할 경우가 발생했다.
즉 app.config를 이용해서 설정하는 방식으로는 그 설정 내용을 마음대로 주무르기가 무척 힘들다는 사실이다.
예를 들면 로그 파일의 이름이나, 경로 같은 경우다. 경로가 딱 정해진 위치라면 상관 없지만, 프로그램이 실행된 뒤, 동적으로 변경되어야 하는 경우라면 이야기가 많이 달라진다.
예를 들면 Application 관련 설정이 다른 위치에 저장되고, 설정 창을 통해 로그 파일의 위치가 변경되는 경우라면 어떻게 할 것인가? 그럼 매번 app.config를 변경해서 재실행해야 할까?
이런 저런 생각에 동적(코드상)으로 변경하는 방식을 찾아보았고, 그 방법을 정리해 보았다.
먼저 동적인 방법으로 설정을 하기 위해서는 log 개체에 대한 구성체계를 가져와야 한다.

  1. log4net.Repository.Hierarchy.Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository();
  2. hierarchy.Configured = true;

이제 모든 설정은 hierarchy를 통해서 진행되게 된다.
먼저 제일 중요한 로직이 어디다가 어떻게 쌓을지에 대해서다.
log4net 에서 제공되는 쌓는 방식은 19가지 정도 되지만, 위의 예제도 그렇듯이, 파일로 제공하는 형태로 구성할 예정이다. 방법 1과 동일한 방식으로 쌓으려면 아래와 같은 로직을 통해 쌓는 방식에 대한 클래스를 생성한다.

  1. log4net.Appender.RollingFileAppender rollingAppender = new log4net.Appender.RollingFileAppender();
  2. rollingAppender.File = “C:\Temp\Test.log”// 전체 경로에 생성할 메인 로그 파일 이름
  3. rollingAppender.AppendToFile = true;
  4. rollingAppender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Date;
  5. rollingAppender.LockingModel = new log4net.Appender.FileAppender.MinimalLock();
  6. rollingAppender.DatePattern = “_yyyyMMdd\”.log\””// 날짜가 지나간 경우 이전 로그에 붙을 이름 구성
  7. log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout(“%date [%property{buildversion}] %-5level %logger – %message%newline”);
  8. rollingAppender.Layout = layout;

여기에 있는 RollongFileAppender는 log 내용을 파일로 쌓는 역할을 제공하는 모듈이다.
이 모듈에 대한 개체를 생성했으면, 이제는 hierarchy에 붙이도록 한다.

  1. hierarchy.Root.AddAppender(rollingAppender);
  2. rollingAppender.ActivateOptions();

이제 로그를 쌓는 레벨을 설정한다.

  1. hierarchy.Root.Level = log4net.Core.Level.All;

이 로직을 로그가 쌓이기 전에 한번 실행 할 수 있도록 구성하면 된다. 다음 코드는 위의 부분 부분을 모두 합친 부분이다.

  1. log4net.Repository.Hierarchy.Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository();
  2. hierarchy.Configured = true;
  3. log4net.Appender.RollingFileAppender rollingAppender = new log4net.Appender.RollingFileAppender();
  4. rollingAppender.File = “C:\Temp\Test.log”// 전체 경로에 생성할 메인 로그 파일 이름
  5. rollingAppender.AppendToFile = true;
  6. rollingAppender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Date;
  7. rollingAppender.LockingModel = new log4net.Appender.FileAppender.MinimalLock();
  8. rollingAppender.DatePattern = “_yyyyMMdd\”.log\””// 날짜가 지나간 경우 이전 로그에 붙을 이름 구성
  9. log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout(“%date [%property{buildversion}] %-5level %logger – %message%newline”);
  10. rollingAppender.Layout = layout;
  11. hierarchy.Root.AddAppender(rollingAppender);
  12. rollingAppender.ActivateOptions();
  13. hierarchy.Root.Level = log4net.Core.Level.All;

프로그램 제일 먼저 시작하는 로직에 추가하면 된다. 대개의 경우에는 program.cs 파일내 추가해주면 된다.

  1. static void Main()
  2. {
  3.     #region 로그 설정
  4.     log4net.Repository.Hierarchy.Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository();
  5.     hierarchy.Configured = true;
  6.     log4net.Appender.RollingFileAppender rollingAppender = new log4net.Appender.RollingFileAppender();
  7.     rollingAppender.File = “C:\Temp\Test.log”// 전체 경로에 생성할 메인 로그 파일 이름
  8.     rollingAppender.AppendToFile = true;
  9.     rollingAppender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Date;
  10.     rollingAppender.LockingModel = new log4net.Appender.FileAppender.MinimalLock();
  11.     rollingAppender.DatePattern = “_yyyyMMdd\”.log\””// 날짜가 지나간 경우 이전 로그에 붙을 이름 구성
  12.     log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout(“%date [%property{buildversion}] %-5level %logger – %message%newline”);
  13.     rollingAppender.Layout = layout;
  14.     hierarchy.Root.AddAppender(rollingAppender);
  15.     rollingAppender.ActivateOptions();
  16.     hierarchy.Root.Level = log4net.Core.Level.All;
  17.     #endregion
  18.     Application.EnableVisualStyles();
  19.     Application.SetCompatibleTextRenderingDefault(false);
  20.     Application.Run(new Form1());
  21. }

이제 app.config 없이도 log가 쌓이게 된다.

정리

이 포스트의 목적은 바로 이 2번째 방법에 따른 방식을 소개하기 위한 글이다.
log4net의 기능의 강력함은 동작 중에 무시할 만큼의 리소스를 소모하면서 강력하게 로그를 쌓는 방식에 있을 것이다. 더욱이 자동으로 파일로 떨구기도 하고, 데이터베이스에 쌓을 수도 있기 때문에, 활용도에서도 우수하다.
개인적으로 현재 프로젝트를 모두 이 log4net 으로 전환하고, 쌓이는 로그를 WinTail(http://www.baremetalsoft.com/wintail/)  이라는 프로그램을 통해서 살펴보고 있다. 동작 중에 발생되는 각종 값에 대한 감시 및 데이터 체크는 모두 이를 통해서 하고 있다. 동적으로 프로그램을 실행하면서 디버깅을 할 때 의외로 편하다.
닷넷 프로그램으로 로깅을 남기는 작업을 해보고 있다면 한번 시도해보심이?

280 Comments

  1. g out

    hi!,I like your writing very a lot! percentage we communicate more approximately
    your post on AOL? I require a specialist in this space
    to unravel my problem. May be that is you! Taking a look ahead to look you.

  2. also g

    I do not know if it’s just me or if everybody else experiencing problems with your website.

    It seems like some of the text on your content are running off the screen. Can somebody else please provide feedback and let
    me know if this is happening to them too? This
    might be a issue with my internet browser because I’ve had this happen before.
    Thank you

  3. https://tinyurl.com/rsacwgxy g

    Hey! This is kind of off topic but I need some help from an established blog.
    Is it very hard to set up your own blog? I’m not very techincal but I can figure things out pretty quick.
    I’m thinking about creating my own but I’m not sure where to begin. Do you have any points or suggestions?
    With thanks

  4. www.vianchi.com

    Greetings from Colorado! I’m bored to tears at work so I decided to browse your site on my iphone during lunch break.
    I love the information you provide here and can’t wait to take a look
    when I get home. I’m shocked at how quick your blog loaded on my cell phone ..
    I’m not even using WIFI, just 3G .. Anyhow, excellent blog!

  5. Emil Virola

    I just want to mention I’m all new to blogging and actually loved this web-site. Very likely I’m going to bookmark your blog . You amazingly have really good articles and reviews. Appreciate it for revealing your web-site.

  6. Crim Safe

    Please let me know if you’re looking for a article author for your weblog. You have some really great posts and I think I would be a good asset. If you ever want to take some of the load off, I’d really like to write some articles for your blog in exchange for a link back to mine. Please blast me an email if interested. Kudos!

  7. cbd buds online sale

    An excellent share, I simply provided this onto an associate that was doing a little analysis on this. As well as he in fact bought me morning meal due to the fact that I found it for him. smile. So let me reword that: Thnx for the treat! However yeah Thnkx for spending the time to review this, I feel strongly about it and enjoy finding out more on this topic. Ideally, as you become knowledge, would you mind upgrading your blog site with more information? It is extremely valuable for me. Huge thumb up for this article!

  8. cbd charlotte's web capsules

    An impressive share, I just given this onto an associate that was doing a little analysis on this. And he actually got me breakfast due to the fact that I located it for him. smile. So let me reword that: Thnx for the treat! However yeah Thnkx for spending the moment to discuss this, I really feel strongly regarding it as well as enjoy finding out more on this topic. When possible, as you end up being knowledge, would you mind updating your blog site with more details? It is highly useful for me. Large thumb up for this article!

  9. Google

    Howdy! This article could not be written much better! Looking at this post reminds me of my previous roommate! He always kept talking about this. I will forward this post to him. Pretty sure he’ll have a very good read. Many thanks for sharing!

  10. Google

    Howdy! I could have sworn I’ve visited your blog before but after browsing through some of the articles I realized it’s new to me. Regardless, I’m definitely happy I found it and I’ll be book-marking it and checking back frequently!

  11. cairqq

    I really love your website.. Great colors & theme. Did you develop this amazing site yourself? Please reply back as I’m attempting to create my very own site and would love to learn where you got this from or exactly what the theme is called. Appreciate it!

  12. patenqq

    You’re so cool! I don’t believe I’ve read through a single thing like that before. So great to discover someone with genuine thoughts on this topic. Really.. many thanks for starting this up. This website is one thing that’s needed on the internet, someone with a bit of originality!

  13. microgaming slot

    Can I simply just say what a comfort to find an individual who actually knows what they’re talking about online. You certainly realize how to bring a problem to light and make it important. More and more people have to check this out and understand this side of the story. I was surprised that you aren’t more popular because you surely possess the gift.

  14. poker pulsa

    You are so interesting! I do not think I’ve truly read through something like that before. So good to find another person with a few original thoughts on this issue. Really.. many thanks for starting this up. This site is one thing that’s needed on the internet, someone with a bit of originality!

  15. daftar dingdong togel casino

    Having read this I thought it was really informative. I appreciate you taking the time and energy to put this information together. I once again find myself spending a significant amount of time both reading and leaving comments. But so what, it was still worth it!

  16. dingdong togel

    Hi there, There’s no doubt that your web site could be having browser compatibility issues. When I look at your web site in Safari, it looks fine but when opening in Internet Explorer, it’s got some overlapping issues. I merely wanted to give you a quick heads up! Besides that, excellent site!

  17. deposit pulsa joker123

    Oh my goodness! Amazing article dude! Thanks, However I am going through issues with your RSS. I don’t know why I can’t join it. Is there anybody else getting similar RSS problems? Anyone who knows the answer can you kindly respond? Thanks!!

  18. dingdong casino togel

    When I originally left a comment I seem to have clicked on the -Notify me when new comments are added- checkbox and now every time a comment is added I recieve 4 emails with the exact same comment. Is there a means you can remove me from that service? Many thanks!

  19. free ebooks to download and read

    The next time I read a blog, Hopefully it doesn’t fail me as much as this particular one. I mean, I know it was my choice to read through, nonetheless I actually believed you would probably have something useful to say. All I hear is a bunch of whining about something that you could possibly fix if you were not too busy seeking attention.

  20. poker88 daftar

    Good day! I could have sworn I’ve been to this blog before but after browsing through a few of the posts I realized it’s new to me. Anyhow, I’m definitely delighted I found it and I’ll be book-marking it and checking back regularly!

  21. download joker 123

    After I initially commented I appear to have clicked on the -Notify me when new comments are added- checkbox and now each time a comment is added I get four emails with the same comment. There has to be an easy method you can remove me from that service? Many thanks!

  22. download joker123

    This is the perfect webpage for anyone who would like to find out about this topic. You realize a whole lot its almost hard to argue with you (not that I personally would want to…HaHa). You definitely put a fresh spin on a topic that’s been written about for decades. Excellent stuff, just wonderful!

  23. Agen BandarQQ Online

    May I simply say what a comfort to discover an individual who truly knows what they’re discussing on the net. You definitely realize how to bring an issue to light and make it important. More and more people must read this and understand this side of the story. It’s surprising you are not more popular because you surely possess the gift.

  24. poker88

    Oh my goodness! Impressive article dude! Thanks, However I am encountering problems with your RSS. I don’t understand the reason why I am unable to subscribe to it. Is there anybody else having the same RSS issues? Anybody who knows the answer can you kindly respond? Thanx!!

  25. poker idn 88

    After looking into a handful of the blog posts on your site, I really appreciate your technique of blogging. I saved as a favorite it to my bookmark website list and will be checking back soon. Take a look at my website too and let me know how you feel.

  26. daftar dingdongtogel

    Oh my goodness! Awesome article dude! Thank you so much, However I am encountering problems with your RSS. I don’t understand why I am unable to join it. Is there anybody having identical RSS issues? Anybody who knows the answer can you kindly respond? Thanx!!

  27. dingdong casino

    Hi, I do believe this is a great website. I stumbledupon it 😉 I will revisit once again since i have book marked it. Money and freedom is the best way to change, may you be rich and continue to help other people.

  28. https://bwinkasino.com/

    Right here is the perfect website for everyone who really wants to find out about this topic. You realize so much its almost tough to argue with you (not that I personally would want to…HaHa). You certainly put a fresh spin on a topic that has been written about for ages. Excellent stuff, just great!

  29. bwinkasino.com

    You’re so awesome! I do not believe I’ve read through a single thing like that before. So great to discover another person with a few original thoughts on this subject matter. Really.. many thanks for starting this up. This website is one thing that’s needed on the web, someone with a bit of originality!

  30. s128

    Howdy! I could have sworn I’ve visited this website before but after looking at many of the articles I realized it’s new to me. Nonetheless, I’m certainly delighted I stumbled upon it and I’ll be bookmarking it and checking back regularly!

  31. Sakong Online

    Hi there! This post couldn’t be written much better! Going through this article reminds me of my previous roommate! He constantly kept talking about this. I most certainly will forward this article to him. Fairly certain he will have a very good read. Many thanks for sharing!

  32. Sbobet777 Indonesia

    I’m impressed, I have to admit. Seldom do I come across a blog that’s both equally educative and interesting, and let me tell you, you’ve hit the nail on the head. The problem is something which too few people are speaking intelligently about. I’m very happy that I stumbled across this during my hunt for something relating to this.

  33. Sbobet999 Slot

    A fascinating discussion is definitely worth comment. I believe that you should publish more about this topic, it may not be a taboo subject but typically people do not talk about such issues. To the next! All the best!!

  34. s12888

    You’re so interesting! I don’t think I’ve truly read through a single thing like this before. So great to find another person with some unique thoughts on this subject matter. Seriously.. many thanks for starting this up. This website is one thing that is required on the web, someone with some originality!

  35. jagos1288

    Good post. I learn something new and challenging on sites I stumbleupon everyday. It’s always interesting to read articles from other writers and practice a little something from their websites.

  36. s128 sabung ayam

    A fascinating discussion is definitely worth comment. I think that you ought to publish more on this subject, it might not be a taboo matter but typically folks don’t talk about such subjects. To the next! Cheers!!

  37. s12888

    I’m more than happy to uncover this website. I wanted to thank you for your time just for this fantastic read!! I definitely savored every bit of it and i also have you saved as a favorite to look at new things in your site.

  38. Judi Online

    This is the right web site for everyone who wants to understand this topic. You realize a whole lot its almost tough to argue with you (not that I personally would want to…HaHa). You definitely put a brand new spin on a topic which has been written about for decades. Great stuff, just great!

  39. Themeforia

    I’m very happy to find this website. I wanted to thank you for ones time due to this wonderful read!! I definitely loved every bit of it and I have you book-marked to look at new things on your blog.

  40. click this site

    Aw, this was an actually nice article. In suggestion I would love to place in writing such as this furthermore? requiring time and also actual initiative to make a very good short article? yet what can I say? I hesitate alot and also never seem to get something done.

  41. judi bola

    You are so interesting! I do not suppose I’ve read through anything like this before. So good to discover another person with original thoughts on this subject. Seriously.. thanks for starting this up. This web site is one thing that’s needed on the internet, someone with a bit of originality!

  42. s12888

    I absolutely love your blog.. Great colors & theme. Did you make this amazing site yourself? Please reply back as I’m wanting to create my own website and would like to learn where you got this from or just what the theme is called. Kudos!

  43. s128 apk

    Hi, I do believe this is an excellent website. I stumbledupon it 😉 I am going to revisit yet again since i have bookmarked it. Money and freedom is the greatest way to change, may you be rich and continue to help others.

  44. login totobet terbaru

    Having read this I thought it was very informative. I appreciate you spending some time and energy to put this article together. I once again find myself personally spending a lot of time both reading and posting comments. But so what, it was still worth it!

  45. agen dominobet

    May I simply say what a relief to find someone who really understands what they are discussing on the net. You definitely know how to bring a problem to light and make it important. More and more people really need to read this and understand this side of the story. I can’t believe you’re not more popular because you surely have the gift.

  46. 88csn

    Good post. I learn something totally new and challenging on sites I stumbleupon everyday. It’s always useful to read through content from other authors and practice something from other websites.

  47. www.doktercash.com

    Having read this I thought it was extremely enlightening. I appreciate you spending some time and effort to put this informative article together. I once again find myself spending a significant amount of time both reading and leaving comments. But so what, it was still worth it!

  48. Megabandar

    A fascinating discussion is definitely worth comment. There’s no doubt that that you need to write more on this topic, it may not be a taboo subject but usually people do not speak about such topics. To the next! All the best!!

  49. https://rezgamer.com/

    Greetings, I do believe your site might be having web browser compatibility problems. Whenever I look at your website in Safari, it looks fine however, if opening in IE, it has some overlapping issues. I simply wanted to give you a quick heads up! Aside from that, great website!

  50. Ulatmovie

    Hello! I could have sworn I’ve visited this blog before but after looking at some of the articles I realized it’s new to me. Nonetheless, I’m definitely delighted I found it and I’ll be bookmarking it and checking back regularly!

  51. s12888

    I must thank you for the efforts you’ve put in penning this site. I am hoping to check out the same high-grade blog posts by you later on as well. In truth, your creative writing abilities has motivated me to get my very own website now 😉

  52. resep masakanku

    An interesting discussion is definitely worth comment. I think that you ought to publish more about this issue, it might not be a taboo subject but usually people don’t talk about such topics. To the next! Kind regards!!

  53. mystargarden

    Oh my goodness! Impressive article dude! Many thanks, However I am encountering troubles with your RSS. I don’t know why I cannot subscribe to it. Is there anybody else having identical RSS issues? Anyone that knows the answer will you kindly respond? Thanks!!

  54. togel dingdong

    You are so interesting! I don’t suppose I have read a single thing like that before. So wonderful to discover someone with unique thoughts on this subject matter. Really.. thank you for starting this up. This web site is one thing that’s needed on the web, someone with some originality!

  55. vivoslot

    The next time I read a blog, I hope that it does not disappoint me just as much as this particular one. I mean, Yes, it was my choice to read through, but I really thought you would have something interesting to say. All I hear is a bunch of crying about something you could possibly fix if you were not too busy searching for attention.

  56. joker 123

    Good post. I learn something new and challenging on websites I stumbleupon everyday. It’s always helpful to read articles from other authors and use a little something from their sites.

  57. joker 128

    Oh my goodness! Amazing article dude! Thank you so much, However I am going through issues with your RSS. I don’t know why I can’t subscribe to it. Is there anybody having similar RSS problems? Anyone that knows the solution will you kindly respond? Thanks!!

  58. joker 188

    Hi, I do think this is a great website. I stumbledupon it 😉 I am going to return yet again since i have book-marked it. Money and freedom is the best way to change, may you be rich and continue to guide other people.

  59. priceline cheap flights

    You’re so interesting! I don’t believe I’ve truly read
    a single thing like that before. So good to discover someone with a few original
    thoughts on this subject matter. Really..
    thanks for starting this up. This site is one thing that is required on the internet, someone with a bit of originality!

  60. judionline.com

    Hi there! I could have sworn I’ve been to this site before but after browsing through some of the posts I realized it’s new to me. Anyhow, I’m certainly pleased I came across it and I’ll be book-marking it and checking back regularly!

  61. idn poker 88

    An impressive share! I’ve just forwarded this onto a friend who has been conducting a little research on this. And he actually bought me lunch because I found it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanx for spending some time to talk about this issue here on your web page.

  62. sv388

    This is the perfect blog for everyone who would like to understand this topic. You realize so much its almost tough to argue with you (not that I really would want to…HaHa). You certainly put a new spin on a subject that has been discussed for decades. Wonderful stuff, just wonderful!

  63. fafaslot

    Right here is the perfect website for anyone who wants to find out about this topic. You realize so much its almost hard to argue with you (not that I really will need to…HaHa). You definitely put a fresh spin on a topic that’s been discussed for a long time. Wonderful stuff, just great!

  64. joker123

    I seriously love your site.. Great colors & theme. Did you develop this web site yourself? Please reply back as I’m trying to create my own personal blog and would like to learn where you got this from or what the theme is called. Thank you!

  65. joker123 slot

    I was more than happy to find this web site. I need to to thank you for ones time for this fantastic read!! I definitely loved every bit of it and i also have you saved as a favorite to look at new things on your site.

  66. joker 123 slot

    Oh my goodness! Incredible article dude! Thank you so much, However I am having difficulties with your RSS. I don’t understand the reason why I am unable to subscribe to it. Is there anyone else having similar RSS problems? Anyone that knows the answer will you kindly respond? Thanx!!

  67. solveclimbing.com

    Oh my goodness! Awesome article dude! Thank you, However I am going through difficulties with your RSS. I don’t understand the reason why I can’t join it. Is there anybody else having the same RSS issues? Anyone who knows the answer will you kindly respond? Thanx!!

  68. WongQQ

    I was more than happy to discover this page. I need to to thank you for your time for this particularly wonderful read!! I definitely enjoyed every bit of it and I have you book-marked to look at new things in your site.

  69. canon support

    Can I simply just say what a relief to discover someone that really knows what they are talking about on the internet. You certainly realize how to bring a problem to light and make it important. A lot more people ought to check this out and understand this side of your story. It’s surprising you’re not more popular given that you certainly possess the gift.

  70. Samsung drivers

    An interesting discussion is worth comment. There’s no doubt that that you should write more on this subject matter, it might not be a taboo matter but typically people don’t talk about such issues. To the next! Cheers!!

  71. Furniture Jepara

    An outstanding share! I’ve just forwarded this onto a co-worker who was conducting a little homework on this. And he in fact bought me lunch because I found it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanks for spending some time to talk about this topic here on your site.

  72. Lemari Hias

    I would like to thank you for the efforts you have put in penning this blog. I’m hoping to view the same high-grade content from you later on as well. In truth, your creative writing abilities has inspired me to get my own, personal blog now 😉

  73. Ponseloka.com

    You are so cool! I don’t think I’ve truly read through anything like this before. So nice to discover another person with genuine thoughts on this subject. Seriously.. many thanks for starting this up. This website is one thing that is required on the web, someone with some originality!

  74. situs qbesar

    After I originally commented I appear to have clicked the -Notify me when new comments are added- checkbox and from now on whenever a comment is added I recieve four emails with the exact same comment. Perhaps there is an easy method you can remove me from that service? Many thanks!

  75. https://ardusat.org/

    An impressive share! I have just forwarded this onto a friend who was doing a little research on this. And he actually bought me lunch simply because I found it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanks for spending time to talk about this issue here on your site.

  76. jokerwin123 slot

    I was more than happy to uncover this page. I need to to thank you for ones time for this fantastic read!! I definitely loved every little bit of it and I have you saved to fav to check out new stuff in your blog.

  77. agen joker388 terpercaya

    The next time I read a blog, I hope that it does not disappoint me just as much as this one. I mean, I know it was my choice to read through, nonetheless I truly thought you’d have something helpful to say. All I hear is a bunch of complaining about something you could fix if you were not too busy seeking attention.

  78. next

    The next time I review a blog site, I really hope that it does not disappoint me as much as this one. I imply, I understand it was my option to review, however I actually believed youd have something interesting to say. All I hear is a number of whining regarding something that you could deal with if you werent also busy searching for focus.

  79. daftar sbobet

    I blog frequently and I genuinely thank you for your content. This article has truly peaked my interest. I am going to bookmark your blog and keep checking for new details about once per week. I subscribed to your RSS feed too.

  80. daftar sbobet88 online

    After going over a handful of the blog posts on your site, I honestly appreciate your way of writing a blog. I book marked it to my bookmark webpage list and will be checking back in the near future. Please visit my web site too and let me know how you feel.

  81. Google

    An outstanding share! I’ve just forwarded this onto a co-worker who had been conducting a little homework on this. And he actually bought me breakfast because I discovered it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanx for spending time to talk about this issue here on your site.

  82. http://103.194.171.205/

    I have to thank you for the efforts you’ve put in penning this site. I am hoping to check out the same high-grade content from you in the future as well. In fact, your creative writing abilities has inspired me to get my own, personal website now 😉

  83. https://hermes21.net/

    An outstanding share! I have just forwarded this onto a coworker who has been doing a little homework on this. And he in fact bought me breakfast simply because I found it for him… lol. So allow me to reword this…. Thanks for the meal!! But yeah, thanx for spending the time to talk about this topic here on your website.

  84. http://103.194.171.205/

    I would like to thank you for the efforts you’ve put in penning this website. I’m hoping to see the same high-grade blog posts by you later on as well. In truth, your creative writing abilities has encouraged me to get my very own blog now 😉

  85. additional hints

    Aw, this was a truly good article. In concept I wish to place in creating like this in addition? requiring time as well as actual initiative to make a very good article? however what can I say? I postpone alot as well as never appear to obtain something done.

  86. taboo phone sex

    Hello there! This post could not be written any better! Looking through this post reminds me of my previous roommate! He always kept talking about this. I will send this article to him. Pretty sure he’ll have a good read. Many thanks for sharing!

댓글 남기기

이메일은 공개되지 않습니다.