Log4j on package level and how to test log entries produced by Log4j
2014-01-21 10:28
459 查看
1. Configure log4j on package level
When you want the logs for different package to be in different log files, you can configure log4j in package level.
So Log4j can be configured on package level, name the logger using the package name, note that the loggers for child packages
would write to the log files of parent packages.
e.g.
<logger name="fred.test.log4j">
<level value="debug"/>
<appender-ref ref="MainProcessAppender"/>
</logger>
<logger name="fred.test.log4j.packageTwo">
<level value="debug"/>
<appender-ref ref="MonitorAppender"/>
</logger>
Say logger "fred.test.log4j" would write to main.log, logger "fred.test.log4j.packageTwo" would write to monitor.log.
then when you run this program, the second logger will write to main.log as well.
2. how to test log4j ?
1. create test appender which derives from AppenderSkeleton
2. get the same logger using "Logger.getLogger()"
3. add the test appender to the logger
4. call the target method which will get the same logger and write logs
5. get log from the appender and verify the log entries
## TargetClassTest.java
TargetClass target;
@Test
public static void test() {
final TestAppender appender = new TestAppender();
final Logger logger = Logger.getLogger(Log4jExampleOne.class);
logger.addAppender(appender);
try {
target.targetMethodWhichWriteLogs();
}
finally {
logger.removeAppender(appender);
}
final List<LoggingEvent> log = appender.getLog();
final LoggingEvent firstLogEntry = log.get(0);
Assert.isTrue(firstLogEntry.getLevel() == Level.INFO);
Assert.isTrue(firstLogEntry.getMessage().equals("Test"));
Assert.isTrue(firstLogEntry.getLoggerName().equals("fred.test.log4j.TargetClass"));
}
class TestAppender extends AppenderSkeleton {
private final List<LoggingEvent> log = new ArrayList<LoggingEvent>();
@Override
public boolean requiresLayout() {
return false;
}
@Override
protected void append(final LoggingEvent loggingEvent) {
log.add(loggingEvent);
}
@Override
public void close() {
}
public List<LoggingEvent> getLog() {
return new ArrayList<LoggingEvent>(log);
}
}
## TargetClass.java
## package name: fred.test.log4j
final Logger logger = Logger.getLogger(TargetClass.class);
public void targetMethodWhichWriteLogs(){
logger.info("Test");
}
When you want the logs for different package to be in different log files, you can configure log4j in package level.
So Log4j can be configured on package level, name the logger using the package name, note that the loggers for child packages
would write to the log files of parent packages.
e.g.
<logger name="fred.test.log4j">
<level value="debug"/>
<appender-ref ref="MainProcessAppender"/>
</logger>
<logger name="fred.test.log4j.packageTwo">
<level value="debug"/>
<appender-ref ref="MonitorAppender"/>
</logger>
Say logger "fred.test.log4j" would write to main.log, logger "fred.test.log4j.packageTwo" would write to monitor.log.
then when you run this program, the second logger will write to main.log as well.
2. how to test log4j ?
1. create test appender which derives from AppenderSkeleton
2. get the same logger using "Logger.getLogger()"
3. add the test appender to the logger
4. call the target method which will get the same logger and write logs
5. get log from the appender and verify the log entries
## TargetClassTest.java
TargetClass target;
@Test
public static void test() {
final TestAppender appender = new TestAppender();
final Logger logger = Logger.getLogger(Log4jExampleOne.class);
logger.addAppender(appender);
try {
target.targetMethodWhichWriteLogs();
}
finally {
logger.removeAppender(appender);
}
final List<LoggingEvent> log = appender.getLog();
final LoggingEvent firstLogEntry = log.get(0);
Assert.isTrue(firstLogEntry.getLevel() == Level.INFO);
Assert.isTrue(firstLogEntry.getMessage().equals("Test"));
Assert.isTrue(firstLogEntry.getLoggerName().equals("fred.test.log4j.TargetClass"));
}
class TestAppender extends AppenderSkeleton {
private final List<LoggingEvent> log = new ArrayList<LoggingEvent>();
@Override
public boolean requiresLayout() {
return false;
}
@Override
protected void append(final LoggingEvent loggingEvent) {
log.add(loggingEvent);
}
@Override
public void close() {
}
public List<LoggingEvent> getLog() {
return new ArrayList<LoggingEvent>(log);
}
}
## TargetClass.java
## package name: fred.test.log4j
final Logger logger = Logger.getLogger(TargetClass.class);
public void targetMethodWhichWriteLogs(){
logger.info("Test");
}
相关文章推荐
- How to record log of specified package by using log4j
- Database Testing – Practical Tips and Insight on How to Test Database
- How To Configure Logging And Log Rotation In Apache On An Ubuntu VPS
- How to Test Mir and Unity 8 on Ubuntu 16.04
- How to solve "warning:waiting for transaction lock on /var/lib/" produced by pressing "Ctrl + c"?
- How to manipulate pixels on a bitmap by scanline property(Ma Xiaoguang and Ma Xiaoming)
- How to Monitor and Log Network Traffic on Linux Using vnStat
- How to Monitor and Log Network Traffic on Linux Using vnStat
- How To Use Netcat to Establish and Test TCP and UDP Connections on a VPS
- How to add, modify, or delete registry subkeys and values by using a registration entries (.reg) file
- virtual memory layout and how to get it by the correspoinding functuon
- How to write effective Test cases, procedures and definitions
- How to resolve Android Camera Preview on Emulator show white and black square only?
- How to install and use Headless Chrome on OSX | Object Partners
- How to config (no)archivelog mode and manage archive log files by RMAN (Updated to 10G)
- how to select data in multiple datatables after using join,group by and order by in Linq
- How to install and run Chromium OS on VMware Player
- How to test Apache CloudStack 4.2 on your local machine
- [WP7] How to press the mouse on a control, and detect MouseLeftButtonUp on another
- How to Log Users Login and Logout Details Through Oracle Forms