jul
1.编写工具类
import java.util.logging.*
public class JulUtil {
public void test1(){
Logger logger = Logger.getLogger(JulService.class.getName());
logger.log(Level.FINEST,"极好的");
logger.log(Level.FINER,"挺好的的");
logger.log(Level.FINE,"好的");
logger.log(Level.CONFIG,"配置");
logger.log(Level.INFO,"普通信息");
logger.log(Level.WARNING,"警告");
logger.log(Level.SEVERE,"严重的");
logger.warning("警告的简单写法");
}
}
2.测试
@Test
public void test1(){
JulService service = new JulService();
service.test1();
System.out.println("111");
System.err.println("111");
}
控制台输出结果
八月 03, 2022 2:50:16 下午 com.log.jul.JulService test1 //洋红色
111 //黑色
严重: 严重的 //洋红色
111 //洋红色
可知:
控制台是洋红色 System.err.parintln
默认打印出info后面的日志:默认配置的日志级别是Info
级别的概念:ALL<FINEST<。。。SEVERE<OFF
public void test2(){
//所有logger默认的父级是java.util.logging.LogManager$RootLogger
//logger父子通过名字来决定
Logger logger1 = Logger.getLogger("a");
Logger logger2 = Logger.getLogger("a.b");
Logger logger3 = Logger.getLogger("a.b.c");
System.out.println(logger3.getParent().getName());//a.b
System.out.println(logger3.getParent()== logger2);//true
System.out.println(logger2.getParent()== logger1);//true
System.out.println(logger1.getParent());//java.util.logging.LogManager$RootLogger
}
设置logger3自己的handler,会有日志重复输出的问题
ConsoleHandler handler = new ConsoleHandler();
logger3.addHandler(handler);
logger3.info("logger3.info");
控制台打印两遍日志
解决:不使用父级的handlers
logger3.setUseParentHandlers(false);
#默认继承父类
handlers= java.util.logging.ConsoleHandler
#默认全局logger级别
.level= INFO
#FileHandler格式
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
#ConsoleHandler格式
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
#可以设置自己包内logger级别
com.log.jul.level = SEVERE
public class JulService {
//加载配置文件
static LogManager logManager = LogManager.getLogManager();
static{
try {
logManager.readConfiguration(JulService.class.getClassLoader().getResourceAsStream("logging.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void test1(){
//继承配置的类,配置文件生效
// Logger logger = Logger.getLogger("com.log.jul.level.abc");
Logger logger = Logger.getLogger(JulService.class.getName());
//设置logger级别
logger.setLevel(Level.ALL);
//获取到父级并设置所有handler(appender)级别
Handler[] handlers = logger.getParent().getHandlers();
for (Handler handler : handlers) {
//设置handler级别
handler.setLevel(Level.ALL);
}
log4j
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.log4j.properties配置控制台输出和输出到文件
#rootLogger日志级别,stdout,a1,a2把logger和其他的具体的appender关联
log4j.rootLogger=INFO,stdout
#设置控制台的appender:stdout是appender的名字,随便起
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#设置编码
log4j.appender.stdout.Encoding=UTF-8
#Target,控制台
log4j.appender.stdout.Target=System.out
#控制台级别
log4j.appender.stdout.Threshold= INFO
#输出格式,布局
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#输出:$d{日期}?p日志级别 c全类名 l第几行 m自己打印的message n换行
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %-5p %20c %L:%m %n
#输出到文件,配置文件appender,每天一个文件,缺点:不会自动清除日志文件
#若是只保留7天的日志:linux内 crontad
# find /home/simplecode/logs -type f -mtime +7 -exec rm -f {} ;
log4j.appender.a1=org.apache.log4j.DailyRollingFileAppender
#输出位置 获取项目目录--目录不需要提前创建,
log4j.appender.a1.File=${user.home}/simpleCode/log4j/a1.log
log4j.appender.a1.Threshold= INFO
log4j.appender.a1.layout=org.apache.log4j.PatternLayout
#输出:$d{日期}?p日志级别 c全类名 l第几行 m自己打印的message n换行
log4j.appender.a1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %-5p %20c %L:%m %n
#输出到文件,配置文件appender,可以指定单个文件最大的size,以及保留多少个日志文件
log4j.appender.a2=org.apache.log4j.RollingFileAppender
#输出位置 获取项目目录--目录不需要提前创建,
log4j.appender.a2.File=${user.home}/simpleCode/log4j/a2.log
#最大文件大小,保留个数(虽然不能控制日志覆盖的时间,但是确保了日志文件及时被清除)
log4j.appender.a2.File.size=100MB
log4j.appender.a2.MaxBackupIndex=7
log4j.appender.a2.Threshold= INFO
log4j.appender.a2.layout=org.apache.log4j.PatternLayout
#输出:$d{日期}?p日志级别 c全类名 l第几行 m自己打印的message n换行
log4j.appender.a2.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %-5p %20c %L:%m %n
#自己业务,因为继承了rootLogger就会在stdout输出,然后a1自己配置也会输出,a2不会输出
log4j.logger.com.suisui.log4j =ERROR,a1
public class Log4jService {
//所有的日志技术,都有父子关系概念,通过"."确定父子关系
//com.suisui.log4j.Log4jService,获取logger
private static Logger logger = Logger.getLogger(Log4jService.class.getName());
/**
* 要使用log4j,必须有log4j的配置文件,默认在类路径下找log4j.properties
* 否则报错
* log4j:WARN No appenders could be found for logger (com.suisui.log4j.Log4jService).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
*/
public void testAPI(){
//输出日志
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.fatal("fatal");
}
}
4.测试
public class Log4jTest {
@Test
public void test1(){
Log4jService service = new Log4jService();
service.testAPI();
}
}
打印结果:
2022-08-03 15:39:56 FATAL com.suisui.log4j.Log4jService 19:fatal
jcl
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
public class JclService {
private Log log = LogFactory.getLog(JclService.class);
public void testAPI(){
//输出日志
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.fatal("fatal");
}
}
1.3测试
@Test
public void test1(){
JclService service = new JclService();
service.testAPI();
}
1.4结果输出
八月 03, 2022 3:51:00 下午 com.suisui.jcl.JclService testAPI
信息: info
八月 03, 2022 3:51:00 下午 com.suisui.jcl.JclService testAPI
警告: warn
八月 03, 2022 3:51:00 下午 com.suisui.jcl.JclService testAPI
严重: fatal
2.log4j依赖+log4j.properties配置文件,使用log4j进行日志输出
2.1加入依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
#rootLogger日志级别,stdout,a1,a2把logger和其他的具体的appender关联
log4j.rootLogger=INFO,stdout
#设置控制台的appender:stdout是appender的名字,随便起
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#设置编码
log4j.appender.stdout.Encoding=UTF-8
#Target,控制台
log4j.appender.stdout.Target=System.out
#控制台级别
log4j.appender.stdout.Threshold= INFO
#输出格式,布局
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#输出:$d{日期}?p日志级别 c全类名 l第几行 m自己打印的message n换行
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %-5p %20c %L:%m %n
2.3工具类测试类同上
2.4结果输出
2022-08-03 15:53:34 INFO com.suisui.jcl.JclService 17:info
2022-08-03 15:53:34 WARN com.suisui.jcl.JclService 18:warn
2022-08-03 15:53:34 FATAL com.suisui.jcl.JclService 19:fatal
slf4j
1.slf4j+logback输出
1.1依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>(单独引入这个也可)
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<!--可以自己定义的变量,该文件后使用-->
<property name="log.path" value="D:\logback.log" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--输出格式 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件名称-->
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>1</maxHistory>
<maxFileSize>100MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<!--日志文件格式-->
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
</pattern>
</encoder>
</appender>
<!--父级的logger设置-->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!--精确到某个业务包 additivity="false"表示当前输出了,父级就不再输出了-->
<logger name="com.suisui.slf4j" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</logger>
</configuration>
1.3工具类
public class Slf4jService {
/**
* slf4j+logback 引入依赖slf4j+logback配置文件
* slf4j+log4j 切换jar包+log4j.properties配置文件,删除logback配置文件
*/
//默认会去类路径下找名为logback.xml的配置文件
private static final Logger logger = LoggerFactory.getLogger(Slf4jService.class);
public void testAPI(){
//输出日志
logger.trace("trace信息");
logger.debug("debug");
logger.info("info信息");
logger.warn("warn");
logger.error("error");
}
}
1.4测试
@Test
public void test1(){
Slf4jService service = new Slf4jService();
service.testAPI();
}
结果打印:
16:27:58.828 logback [main] INFO com.suisui.slf4j.Slf4jService - info信息
16:27:58.831 logback [main] WARN com.suisui.slf4j.Slf4jService - warn
16:27:58.831 logback [main] ERROR com.suisui.slf4j.Slf4jService - error
2.slf4j适配到log4j输出
2.1依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
2.2log4j.properties同jcl 2.2
2.3-2.4同上
结果输出
2022-08-03 16:30:48 INFO com.suisui.slf4j.Slf4jService 18:info信息
2022-08-03 16:30:48 WARN com.suisui.slf4j.Slf4jService 19:warn
2022-08-03 16:30:48 ERROR com.suisui.slf4j.Slf4jService 20:error
原文地址:https://blog.csdn.net/weixin_43994244/article/details/126140358
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_28222.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。