14 Mayıs 2015 Perşembe

Log4j

Loglama
Log4j gibi çatılar genellikle debug,error gibi kodu ilgilendiren durumlar için kullanılır. Loglama sadece koddan ibaret bir kavram değildir. Bir çok yazılımda Audit_Log, System_Log gibi yapılan hareketleri, sistemin kaynak, sağlık kullanımını kaydeden loglar da mevcuttur.

Log4J

1. Kavram - Appender
FileAppender ve RollingFileAppender en çok kullanılanları. Her Appender bir PatternLayout kullanır.


XML Olarak bazı Appender ayarları şöyle

FileAppender
Örnek:
<appender name="FileAppender" type="log4net.Appender.FileAppender">
  <param name="File" value="c:\\ PeejayImpex.log"/>
  <!-- Example using environment variables in params -->
  <!-- <param name="File" value="${TMP}\\ApplicationKit.log" /> -->
  <param name="AppendToFile" value="true"/>
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-2p %c [%x] - %m%n"/>
  </layout>
</appender>

RollingFileAppender
Log4Net xml ayarları ile Log4J xml ayarları benziyorlar ancak birebir aynı değiller.

Log4Net örneği:
<appender name="MyAppender" type="log4net.Appender.RollingFileAppender">
  <file value="log.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level %logger - %message%newline" />
  </layout>
</appender>
Log4J örneği:
<appender name="default" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="${log.dir}/logs/serverout.txt" />
  <param name ="Append" value="TRUE"/>
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{[HH:mm:ss:SSS]|[MM-dd-yyyy]}|[%c]|[%p]|[%L]: %m|%n"/>
   </layout>
   <param name="MaxFileSize" value="10MB"/>
   <param name="MaxBackupIndex" value="100"/>
</appender>
2. Kavram - Layout
Satırın örüntüsünü belirtir. İki temel layout var. PatternLayout ile örüntüyü kendimiz belirleriz. SimpleLayout daha basittir.

3. Kavram - Logger
Logger bir isme sahip olan ve kendisine verilen log mesajı belirtilen loglama seviyesinden yukarıda ise appenderları çağıran sınıf. Logger birden fazla appendera sahip olabilir.

XML Olarak Logger Ayarları
Log4j örneği
<logger name="com.mypackage" additivity="false">
                <level value="INFO"/>
                <appender-ref ref="default"/>
</logger>

LogManager
Log4net'de bir Logger'ı almak için kullanılabilir.
LogManager.GetLogger(typeof(MyType))

RootLogger
Logger sınıfının getRootLogger() metodu ile alınır. RootLogger aşağıdaki gibi kullanılabilir.
Logger rootLogger = Logger.getRootLogger();
String level = arg[0];
rootLogger.setLevel(levelmap.get(level));

Sınıf için logger
Log4j için Logger sınıfının getLogger() metoduna sınıf verilerek alınır. Örnek:
static Logger log = Logger.getLogger(Log4jExample.class.getName());
4. Kavram Loglama Seviyesi
Loglama seviyesine göre metodlar var.
logger.debug(...)

Bu metodlar bir enum ile gerçek loglama metodunu çağırıyorlar.
logger.log(DEBUG, ...)

Ayarları Okutturmak
C# ile app.config içindeki ayarlı şöyle okutturulur.
log4net.Config.XmlConfigurator.Configure();

Kernel Log Mesajları
Linux'ta kernel mesajlarını görme konusu da loglama ile ilgili olduğu için konuyu buraya ekledim.
dmesg komutu ile kernel loglarını görebilme imkanı var. dmesg kernel içindeki etkin logları gösterir.
/var/log/dmesg ise eski logları gösterir.

Bir diğer yöntem ise kodla kernel mesajlarının console gönderilmesi. Bunun için  ioctl (0,TIOCLINUX...) kullanılıyor. Örnek:


Hiç yorum yok:

Yorum Gönder