Logging

Java

主なロギング・Facadeライブラリ

Commons Logging

SLF4J

主なロギング・ライブラリ

Java Logging API(java.util.logging)

Log4J

Logback

★Commons Logging + Log4J 一般

必要なライブラリファイル

・commons-logging-xxx.jar

・log4j-xxx.jar

必要な設定ファイル

・commons-logging.properties

・log4j.properties

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

private static Log LOG = LogFactory.getLog(XXX.class);

LOG.trace("aaa");

LOG.debug("aaa"); // 開発時

LOG.info("aaa"); // 運用時

LOG.warn("aaa");

LOG.error("aaa");

LOG.fatal("aaa");

log4j.properties

log4j.rootLogger=DEBUG,stdout,logout #DEBUG、INFO、WARN、ERROR、FATAL

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target = System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=-%d{yyyy-MM-dd HH:mm:ss,SSS}%c - %m%n

log4j.appender.logout=org.apache.log4j.RollingFileAppender

log4j.appender.logout.File=log.txt

log4j.appender.logout.MaxFileSize=500KB

log4j.appender.logout.MaxBackupIndex=1

log4j.appender.logout.layout=org.apache.log4j.PatternLayout

log4j.appender.logout.layout.ConversionPattern=-%d{yyyy-MM-dd HH:mm:ss,SSS} - %c{1} - %m%n

ちなみに、Log4jのみの場合

import org.apache.log4j.Logger;

private static final Logger LOG = Logger.getLogger(XXX.class);

LOG.warn("aaa");

...

★SLF4J + Log4J

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.6.1</version>

</dependency>

if (logger.isDebugEnabled()) {

logger.debug("id: " + id + " name: " + name); //Log4J

logger.debug("id: {} name : {} ", id, name); //SLF4J

}

★SLF4J + LogBack 改良

必要なライブラリファイル

・slf4j-api-xxx.jar

・logback-core-xxx.jar

・logback-classic-xxx.jar

必要な設定ファイル

・src/main/resources/logback.xml

・src/test/resources/logback-test.xml

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>1.0.13</version>

</dependency>

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private static Logger LOG = LoggerFactory.getLogger(XXX.class);

LOG.trace("aaa");

LOG.debug("aaa");

LOG.info("aaa");

LOG.warn("aaa");

LOG.error("aaa");

LOG.off("aaa");

logback.xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

<layout class="ch.qos.logback.classic.PatternLayout">

<Pattern>

%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

</Pattern>

</layout>

</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">

<file>MyLog.log</file>

<layout class="ch.qos.logback.classic.PatternLayout">

<Pattern>

%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

</Pattern>

</layout>

</appender>

<logger name="com.xxx" level="TRACE" />

<root level="debug">

<appender-ref ref="STDOUT" />

<appender-ref ref="FILE" />

</root>

</configuration>

★自作ログ

public class LogUtil {

private static Logger logger;

private static LogUtil instance = new LogUtil();

private LogUtil(){ }

public static LogUtil getInstance(Class<?> cls) {

logger = LoggerFactory.getLogger(cls);

return instance;

}

// info, warn, errorも同様

public void debug(String msg) {

logger.debug(msg);

}

}

//利用側

private LogUtil logUtil = LogUtil.getInstance(this.getClass());

C#

★log4netでisDebugEnabledがfalseになる問題

log4net.LogManager.GetLogger()

解決方法:

AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch = true)]を追加

★ElasticSearch

https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

インストール

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list

sudo apt-get update && sudo apt-get install elasticsearch

起動

sudo /etc/init.d/elasticsearch start

確認

localhost:9200/item/_search

localhost:9200/item/_mapping

localhost:9200/item/simple/_search

★ELK

Elasticsearch – a distributed indexing and search platform

>Provide a REST interface on top of a fancy distributed, highly available full text and semi-structured text searching system.

Logstash – log aggregator and processor

>Take log feeds from lots of different sources, filter and mutate them, and output them somewhere else.

Kibana – web based interactive visualization and query tool

>Explore the raw data and turn it into fancy aggregate charts and build dashboards.

★EKK(Amazon Elasticsearch Service, Amazon Kinesis, Kibana)