log4j学习

简介:


由于本人的开发经验有限,能力有限,所以难免会有很多不足之处,所以希望大家可以一起交流学习!以前总是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日志并进行多维度分析。
相关文章
|
1月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
172 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
1月前
|
Kubernetes 容器
k8s学习-CKS真题-日志审计 log audit
k8s学习-CKS真题-日志审计 log audit
108 0
|
1月前
|
存储 缓存 关系型数据库
认真学习MySQL的事务日志-Redo日志
认真学习MySQL的事务日志-Redo日志
53 0
|
6月前
|
存储 监控 数据可视化
小白带你学习linux的ELK日志收集系统
小白带你学习linux的ELK日志收集系统
187 0
|
9月前
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
648 1
|
1月前
|
Kubernetes 监控 容器
k8s学习-CKA真题-监控Pod日志
k8s学习-CKA真题-监控Pod日志
87 0
|
8月前
|
Java 测试技术 Docker
Spring Boot 学习研究笔记(十九)-docker部署SpringBoot 日志目录挂载
Spring Boot 学习研究笔记(十九)-docker部署SpringBoot 日志目录挂载
325 0
|
21天前
|
网络安全 数据安全/隐私保护 网络虚拟化
神州数码DCWS学习日志(二)
神州数码DCWS学习日志
12 1
|
21天前
|
网络安全 数据安全/隐私保护
神州数码DCWS学习日志
神州数码DCWS学习日志
9 0
|
1月前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志