- com
- com.doj
- com.doj.app
- com.doj.app.LoggingExample
- FATAL: Severe errors that cause premature termination. Expect these to be immediately visible on a status console.
- ERROR: Other runtime errors or unexpected conditions. Expect these to be immediately visible on a status console.
- WARNING: Warnings in the application.
- INFO: Interesting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum.
- DEBUG: detailed information on the flow through the system. Expect these to be written to logs only.
- TRACE: more detailed information. Expect these to be written to logs only.
- SimpleFormatter: This formatter generates text messages with basic information. ConsoleHandler uses this formatter class to print log messages to console.
- XMLFormatter: This formatter generates XML message for the log, FileHandler uses XMLFormatter as a default formatter.
public class MyFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return record.getLevel() + ":" + record.getMessage();
}
}
logger.addHandler(new ConsoleHandler());
- ConsoleHandler
- FileHandler
- StreamHandler
- SocketHandler
- MemoryHandler
public class MyHandler extends StreamHandler {
@Override
public void publish(LogRecord record) {
super.publish(record);
}
@Override
public void flush() {
super.flush();
}
@Override
public void close() throws SecurityException {
super.close();
}
}
- Adding needed libraries
- Configuration
- Placing log statements
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
<Configuration status="debug" name="doj" packages="">
<Appenders>
<Console name="stdout" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %p %m%n"/>
</Console>
</Appenders>
</Configuration>
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
<Appenders>
<File name="fout" fileName="doj.log" append="true">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%nw</Pattern>
</PatternLayout>
</File>
</Appenders>
- file – determines file name of the log file
- append – The default value for this param is true, meaning that by default a File appender will append to an existing file and not truncate it.
<Root level="error">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="fout"/>
</Root>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.5</version>
</dependency>
/**
*
*/
package com.doj.app;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* @author Dinesh.Rajput
*
*/
public class Log4jExample {
private static Logger logger = LogManager.getLogger(Log4jExample.class);
public static void main(String[] args) {
logger.debug("Debug log message");
logger.info("Info log message");
logger.error("Error log message");
}
}
logger.trace("Trace log message");
<Logger name="com.doj.app" level="debug">
<AppenderRef ref="stdout"/>
</Logger>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<configuration>
# Console appender
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
# Pattern of log message for console appender
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
</layout>
</appender>
# File appender
<appender name="fout" class="ch.qos.logback.core.FileAppender">
<file>doj.log</file>
<append>false</append>
<encoder>
# Pattern of log message for file appender
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</pattern>
</encoder>
</appender>
# Override log level for specified package
<logger name="com.doj.app" level="TRACE"/>
<root level="INFO">
<appender-ref ref="stdout" />
<appender-ref ref="fout" />
</root>
</configuration>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4jExample {
private static Logger logger = LoggerFactory.getLogger(Log4jExample.class);
public static void main(String[] args) {
logger.debug("Debug log message");
logger.info("Info log message");
logger.error("Error log message");
}
}
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration debug="false">
<!--Console appender-->
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %p %m%n"/>
</layout>
</appender>
<!-- File appender-->
<appender name="fout" class="org.apache.log4j.FileAppender">
<param name="file" value="log4j/target/doj-log4j.log"/>
<param name="append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n"/>
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %p %m%n"/>
</layout>
</appender>
<!--Override log level for specified package-->
<category name="com.doj.app.log4j">
<priority value="TRACE"/>
</category>
<root>
<level value="DEBUG"/>
<appender-ref ref="stdout"/>
<appender-ref ref="fout"/>
</root>
</log4j:configuration>
/**
*
*/
package com.doj.app.log4j;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* @author Dinesh.Rajput
*
*/
public class Log4jExample {
private static Logger logger = LogManager.getLogger(Log4jExample.class);
public static void main(String[] args) {
logger.trace("Trace log message");
logger.debug("Debug log message");
logger.info("Info log message");
logger.error("Error log message");
}
}
Happy Learning!!!
