log4j学习

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:


由于本人的开发经验有限,能力有限,所以难免会有很多不足之处,所以希望大家可以一起交流学习!以前总是system.out.println();现在开发需要写日志了!所以就简单的学习了一下,log4j是最常用的一个日志记录apache的开源项目。这里我只简单的减少一下,同时会上传一些文档和demo,您需要的话可以自己下载来看看,其实很多文档都是差不多的。


  1. 1.为什么要用log4j;

开发一个系统的时候,总会System.out.println()来打印一些信息,但这些语句在系统稳定之后,就没有作用了,成了垃圾代码。Log4j就可以解决这个问题。


  1. 2.Log4j的处理过程

你可以使用Log4j来代替系统中输出语句,当你系统稳定之后,只要修改配置文件,就可以不显示打印信息了。


3 ,在应用系统的维护过程中,应用程序运行时所记录的日志对维护工作起着至关重要


的作用,应用日志常常可以让我们方便快速的定位到故障或BUG的所在。



4.无论是开源项目还是商业项目,LOG4J在事实上都成为了大多数程序员的选择,因


为其配置简单,使用方便,功能强大,能生成各种格式或各种类型的日志,并且可以将


日志写到文件、数据库、网络等目的地。



5.在对Logger实例进行命名时,没有限制,可以取任意自己感兴趣的名


字。一般情况下建议以类的所在位置来命名Logger实例,这是目前来讲比较有


效的Logger命名方式。这样可以使得每个类建立自己的日志信息,便于管理。


比如:


staticLoggerlogger= Logger.getLogger(ClientWithLog4j.class.getName());



6. Log4J对应用性能的影响


如果在程序运行中输出大量日志,显然会对应用的性能造成一定的影响。Log4J


对性能的影响取决于以下因素:


·日志输出目的地:输出到控制台的速度和输出到文件系统的速度是不一样


的。


·日志输出格式:格式简单,速度也更快。


·日志级别:日志级别设置的越低,输出的日志内容越多,对性能的影响也


越大。



7.

在应用程序中添加日志记录总的来说基于三个目的:


<1>.监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;


<2>.跟踪代码运行时轨迹,作为日后审计的依据;


<3>.担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。



8. #DAOlog 记录到DAOLog,allLog


log4j.logger.DAO=DEBUG,A2,A4


#将逻辑层log记录到BusinessLog,allLog 


log4j.logger.Businesslog=DEBUG,A3,A4



9. 任何logging API 与简单的System.out.println输出调试信息方法比较,最主要的优点在于它能够关闭一些调试信息输出而不影响其他人的调试。



**************************************************************************

1.只输出到控制台


#此属性指定日志等级,stdout为输出的目的地

log4j.rootCategory = info,stdout


#指定com.log.test.LogTest这个类可以输出debug级别的日志

log4j.logger.com.log.test.LogTest = Debug


#输出的目的地为控制台

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

#指定输出日志的布局类型

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

#日志的一些具体信息

log4j.appender.stdout.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n



2.输出到文件中


#此属性指定日志等级,stdout,logfile为输出的目的地

log4j.rootCategory = info,logfile


#输出目的地类型为文件

log4j.appender.logfile=org.apache.log4j.FileAppender

#文件名为LogTest.log

log4j.appender.logfile.File=LogTest.log

#指定输出日志的布局类型

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

#日志的一些具体信息

log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n



3.当日志文件大于100M时从新生成一个新的


#此属性指定日志等级,stdout,logfile为输出的目的地

log4j.rootCategory = info,logfile


#输出目的地类型为文件

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

#文件名为LogTest.log

log4j.appender.logfile.File=LogTest.log

log4j.appender.logfile.Append=true

#设置日志文件的最大存储量

log4j.appender.logfile.MaxFileSize=100MB

#指定输出日志的布局类型

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

#日志的一些具体信息

log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n


4.每天生成一个日志文件


#此属性指定日志等级,stdout,logfile为输出的目的地

log4j.rootCategory = info,logfile


#输出目的地类型为文件

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender

#文件名为LogTest.log

log4j.appender.logfile.File=LogTest.log

#指定输出日志的布局类型

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

#日志的一些具体信息

log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n


*************************************************************************

在程序中怎么用的呢?~

1.你要导入两个jar包

135254887.png

2.在src中写一个配置文件,名字为:log4j.properties.

内容可以为上面四种情况的任意一种!你可以把日志输出控制台,或输出到文件中或者定义文件大小,是否每天产生一个新的日志文件等等。常用的也就这四种!具体的你可以根据文档自己搭配。我这里就不多说了!文档我会上传到下载里!名字:log4j-2012

3.具体程序中如何用的


package com.log.test;


import org.apache.log4j.Logger;



public class LogTest {


static Logger logger = Logger.getLogger(LogTest.class.getName());

public static void main(String[] args) {

//获取Logger实例,参数为本类

//Logger logger = Logger.getLogger(LogTest.class);

//输出一段DEBUG信息

logger.debug("2debuging");

//输出一段INFO信息

logger.info("info2....");

//输出一段ERROR信息

logger.error("error2....");

int a = 0;

try {

int b = 4/a;

} catch (Exception e) {

logger.debug("大哥,bbbbbbbbbbbbbb有bug啊");

}

}

}

这样你执行这个main方法就可以了!当然,若是在一个web project中,那你启动工程,该执行日志时就执行了!!

注意:也许你忘记了再java project中如何导入jar包的问题。见下图


140003422.png

good luck .. good good study ,day day up ...


#########################################################

2013-06-23-add-han-如果你想输入到控制台和文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
log4j.rootCategory = info,stdout,logfile,errorfile
log4j.logger.com.log.test.LogTest = Debug
log4j.logger.com.log.test.LogTest1 = Debug
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
#log4j.rootCategory = info,logfile,
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=D:/LogTest.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
#所有的错误信息输入到D:/ErrorLogTest.log中
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.File=D:/ErrorLogTest.log
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.Threshold=ERROR
log4j.appender.errorfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n


这篇关于日志的文章写的很不错,可以读读。


可以参考的文章。2014-04-21-add


2014-04-22-可以参考一下此文章。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#log4j.rootLogger=trace, stdout,logfile,errorfile
#log4j.rootLogger=debug, stdout,logfile
log4j.rootLogger=info, stdout,logfile,errorfile
#1.console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.Threshold=info
#log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.appender.stdout.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
#2.file
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=${catalina.home}/logs/log.log
log4j.appender.logfile.Append=true
log4j.appender.logfile.Threshold = DEBUG
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
#3.errorfile
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.File=${catalina.home}/logs/logerror.log
log4j.appender.errorfile.DatePattern = '.'yyyy-MM-dd-HH-mm
log4j.appender.errorfile.Append=true
log4j.appender.errorfile.Threshold=ERROR
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package  com.book.web.controller;
 
import  org.apache.commons.logging.Log;
import  org.apache.commons.logging.LogFactory;
import  org.apache.log4j.Logger;
 
 
/**
  * log4j1测试
  * @author liweihan
  * http://hanchaohan.blog.51cto.com/2996417/759111
  */
public  class  TestLog4j1Log {
     
     /**
        1.引入jar包
        <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>1.2.9</version>
         </dependency>
         
         2.在resources中加入log4j.properties文件。
           Logger.getLogger(TestLog4j1Log.class)默认到类路径下加载log4j.properties配置文件
               如果log4j.properties配置文件不在类路径下,则可以选择如下方式之一来加载配置文件
               
           <1.>使用classLoader来加载资源
                 PropertyConfigurator.configure(Log4jTest.class.getClassLoader().getResource("properties/log4j.properties"));
         
           <2.>使用log4j自带的Loader来加载资源
               PropertyConfigurator.configure(Loader.getResource("properties/log4j.properties"));
               
          3.如果要commons-logging和log4j一起使用,还需要引入jar包:
          【https://my.oschina.net/pingpangkuangmo/blog/407895】
              同时获取log的方式为:
              private static Log logger = LogFactory.getLog(TestLog4j1Log.class);
            <dependency>
               <groupId>commons-logging</groupId>
               <artifactId>commons-logging</artifactId>
               <version>1.2</version>
             </dependency>
             
         4.log4j1和slf4j进行集成的话,还需要引入jar包
         <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-api</artifactId>
           <version>1.7.7</version>
         </dependency>
         <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
           <version>1.7.7</version>
         </dependency>
         
         Logger logger=LoggerFactory.getLogger(TestLog4j1Log.class);
         slf4j的Logger是slf4j定义的接口,而log4j的Logger是类。
         LoggerFactory是slf4j自己的类
         
      */
 
     private  static  final  Logger logger = Logger.getLogger(TestLog4j1Log. class );
     
     public  static  void  main(String[] args) {
         
         if  (logger.isDebugEnabled()) {
             logger.debug( " ====== log4j debug meassage" );
         }
         if  (logger.isInfoEnabled()) {
             logger.info( " ====== log4j info message " );
         }
     }
     
}


java自带的log日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package  com.book.web.controller;
 
import  java.util.logging.Logger;
 
 
/**
  * jdk自带的logging
  * @author liweihan
  *
  */
public  class  TestJDKLog {
     
     private  static  final  Logger logger = Logger.getLogger(TestJDKLog. class .getName());
     /**
         默认是jre目录下的lib/logging.properties文件,
      */
     
     public  static  void  main(String[] args) {
         logger.info( " ====== jdk logging info : a msg" );
     }
 
}



     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/759111 ,如需转载请自行联系原作者







相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
282 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
6月前
|
Kubernetes 容器
k8s学习-CKS真题-日志审计 log audit
k8s学习-CKS真题-日志审计 log audit
169 0
|
6月前
|
Kubernetes 监控 容器
k8s学习-CKA真题-监控Pod日志
k8s学习-CKA真题-监控Pod日志
109 0
|
1月前
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
43 3
|
1月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
24 3
|
1月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
130 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
2月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
1月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
30 0
|
3月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
130 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
3月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。