1)采用maven模式
2)logback.xml需要放到resource中
3)依赖包
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-examples</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
</dependencies>
package com.wang.logback.file;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestFileLogback {
Logger logger = LoggerFactory.getLogger(TestFileLogback.class);
public void test(){
logger.info("this is TestFileLogback");
System.out.println("bbbbbbbbbbb");
}
public static void main(String[] args) {
TestFileLogback testFileLogback = new TestFileLogback();
testFileLogback.test();
}
}
package com.wang.logback.mdc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
public class TestMDCLogback {
Logger logger = LoggerFactory.getLogger(TestMDCLogback.class);
public void testMdc(){
String[] companYnames = {"华为","小米","中兴"};
for(int i=0;i<companYnames.length;i++){
showInfo(companYnames[i]);
}
System.out.println("cccccccccccc");
}
private void showInfo(String companyname){
MDC.put("companyname", companyname);
logger.info("{} TestMDCLogback", companyname);
// MDC.remove("companyname");
}
public static void main(String[] args) {
TestMDCLogback testMDCLogback = new TestMDCLogback();
testMDCLogback.testMdc();
}
}
package com.wang.logback.normal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestLogback {
Logger logger = LoggerFactory.getLogger(TestLogback.class);
public void test(){
logger.info("this is TestLogback");
System.out.println("aaaaaaaaa");
}
public static void main(String[] args) {
TestLogback testLogback = new TestLogback();
testLogback.test();
}
}
下面这个是网上的,做个记录
package com.wang.logback.task;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
// 任务类
public class MyTask implements Runnable {
private static Logger LOG = LoggerFactory.getLogger(MyTask.class);
private String taskId;
public MyTask(String taskId) {
this.taskId = taskId;
}
public void run() {
try {
/* 上面logback.xml中discriminator根据taskId这个key的value来决定,taskId的value通过这种方式设置,
这里设置的key-value对是保存在一个ThreadLocal<Map>中的,所以不会对其他线程中的taskId这个key产生影响
*/
MDC.put("taskId", taskId);
for (; ; ) {
// 写日志,使用SiftingAppender,由于当前调用线程taskId的value是对应this.taskId(假设是task-0),
// 所以会输出到task-0这个文件中
LOG.info("taskId={}, threadNo={}", taskId, Thread.currentThread());
Thread.sleep(2000);
}
} catch (Exception e) {
} finally {
MDC.remove(taskId);
}
}
public static void main(String[] args) {
ExecutorService taskExecutors = Executors.newCachedThreadPool();
// 运行10个task,启动了10个线程
for (int i = 0; i < 10; ++i) {
taskExecutors.submit(new MyTask("task-" + i));
}
taskExecutors.shutdown();
}
}