package test.utils.log;
import com.firefly.utils.StringUtils;
import com.firefly.utils.io.FileUtils;
import com.firefly.utils.log.Log;
import com.firefly.utils.log.LogFactory;
import com.firefly.utils.log.file.FileLog;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import test.utils.log.foo.Foo;
import test.utils.log.foo.bar.Bar;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class LogTest {
private static final Log log = LogFactory.getInstance().getLog("firefly-common");
private static final Log log2 = LogFactory.getInstance().getLog("test-TRACE");
private static final Log log3 = LogFactory.getInstance().getLog("test-DEBUG");
private static final Log log4 = LogFactory.getInstance().getLog("test-ERROR");
private static final Log log5 = LogFactory.getInstance().getLog("test-WARN");
private static final Log log6 = LogFactory.getInstance().getLog("test-INFO");
private static final Log logConsole = LogFactory.getInstance().getLog("test-console");
private static final Log defaultLog = LogFactory.getInstance().getLog("firefly-system");
private static final Log illegalLog = LogFactory.getInstance().getLog("test-illegal");
private static final Log logFoo = LogFactory.getInstance().getLog(Foo.class);
private static final Log logBar = LogFactory.getInstance().getLog(Bar.class);
private static final Log testMaxSize = LogFactory.getInstance().getLog("test.max.size");
private static final Log testGBK = LogFactory.getInstance().getLog("test.gbk");
@Before
public void init() {
deleteLog(log2);
deleteLog(log3);
deleteLog(log4);
deleteLog(log5);
deleteLog(log6);
deleteLog(logFoo);
deleteLog(logBar);
}
private void deleteLog(Log log) {
File file = getFile(log);
if (file != null && file.exists())
file.delete();
}
private File getFile(Log log) {
if (log instanceof FileLog) {
FileLog fileLog = (FileLog) log;
File file = new File(fileLog.getPath(), fileLog.getName() + "." + LogFactory.DAY_DATE_FORMAT.format(new Date()) + ".txt");
if (file.exists())
return file;
else
return null;
}
return null;
}
@Test
public void test() {
// test trace
log2.trace("trace log");
log2.debug("debug log");
log2.info("info log");
log2.warn("warn log");
log2.error("error log");
// test debug
log3.trace("trace log");
log3.debug("debug log");
log3.info("info log");
log3.warn("warn log");
log3.error("error log");
// test info
log6.trace("trace log");
log6.debug("debug log");
log6.info("info log");
log6.warn("warn log");
log6.error("error log");
// test warn
log5.trace("trace log");
log5.debug("debug log");
log5.info("info log");
log5.warn("warn log");
log5.error("error log");
// test error
log4.trace("trace log");
log4.debug("debug log");
log4.info("info log");
log4.warn("warn log");
log4.error("error log");
logFoo.info("testFoo");
logBar.info("testBar");
try {
Thread.sleep(2000L);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
FileUtils.read(getFile(logFoo), (text, num) -> {
String[] data = StringUtils.split(text, '\t');
Assert.assertEquals("testFoo", data[1]);
}, "utf-8");
FileUtils.read(getFile(logBar), (text, num) -> {
String[] data = StringUtils.split(text, '\t');
Assert.assertEquals("testBar", data[1]);
}, "utf-8");
// test trace
FileUtils.read(getFile(log2), (text, num) -> {
String[] data = StringUtils.split(text, '\t');
switch (num) {
case 1:
Assert.assertEquals("trace log", data[1]);
break;
case 2:
Assert.assertEquals("debug log", data[1]);
break;
case 3:
Assert.assertEquals("info log", data[1]);
break;
case 4:
Assert.assertEquals("warn log", data[1]);
break;
case 5:
Assert.assertEquals("error log", data[1]);
break;
default:
break;
}
}, "UTF-8");
// test debug
FileUtils.read(getFile(log3), (text, num) -> {
String[] data = StringUtils.split(text, '\t');
switch (num) {
case 1:
Assert.assertEquals("debug log", data[1]);
break;
case 2:
Assert.assertEquals("info log", data[1]);
break;
case 3:
Assert.assertEquals("warn log", data[1]);
break;
case 4:
Assert.assertEquals("error log", data[1]);
break;
default:
break;
}
}, "UTF-8");
// test info
FileUtils.read(getFile(log6), (text, num) -> {
String[] data = StringUtils.split(text, '\t');
switch (num) {
case 1:
Assert.assertEquals("info log", data[1]);
break;
case 2:
Assert.assertEquals("warn log", data[1]);
break;
case 3:
Assert.assertEquals("error log", data[1]);
break;
default:
break;
}
}, "UTF-8");
// test warn
FileUtils.read(getFile(log5), (text, num) -> {
String[] data = StringUtils.split(text, '\t');
switch (num) {
case 1:
Assert.assertEquals("warn log", data[1]);
break;
case 2:
Assert.assertEquals("error log", data[1]);
break;
default:
break;
}
}, "UTF-8");
// test error
FileUtils.read(getFile(log4), (text, num) -> {
String[] data = StringUtils.split(text, '\t');
switch (num) {
case 1:
Assert.assertEquals("error log", data[1]);
break;
default:
break;
}
}, "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
LogFactory.getInstance().stop();
}
public static void main(String[] args) throws Throwable {
long data = 0;
while (true) {
testMaxSize.info("test 测试 {} data {}", "log", data);
testGBK.info("测试中文gbk");
data++;
Thread.sleep(1000);
}
}
public static void main2(String[] args) throws InterruptedException {
try {
log.info("test {} aa {}", "log1", 2);
log.info("test {} bb {}", "log1", 2);
log.info("test {} cc {}", "log1", 2);
log.debug("cccc");
log.warn("warn hello");
log2.trace("test trace");
log2.trace("log2 {} dfdfdf", 3, 5);
log2.debug("cccc");
log3.debug("log3", "dfd");
log3.info("ccccddd");
log4.error("log4");
log4.warn("ccc");
log5.warn("log5 {} {}", "warn");
log5.error("log5 {}", "error");
log5.trace("ccsc");
logConsole.info("test {} console", "hello");
logConsole.debug("ccc");
logConsole.warn("dsfsf {} cccc", 33);
defaultLog.debug("default log debug");
defaultLog.info("default log info");
defaultLog.warn("default log warn");
defaultLog.error("default log error");
illegalLog.trace("test log trace");
illegalLog.debug("test log debug");
illegalLog.info("test log info");
illegalLog.warn("test log warn");
illegalLog.error("test log error");
try {
test3();
} catch (Throwable t) {
log4.error("test exception", t);
}
Thread.sleep(3000L);
} finally {
LogFactory.getInstance().stop();
}
}
public static void test1() {
throw new RuntimeException();
}
public static void test2() {
test1();
}
public static void test3() {
test2();
}
}