Java log日志输出

转载 2015年11月18日 23:17:23

在Spring框架中添加日志功能:

pom.xml

1<dependency>
2   <groupId>log4j</groupId>
3   <artifactId>log4j</artifactId>
4   <version>1.2.17</version>
5</dependency>

web.xml

 1   <!-- 启动log -->
 2      <servlet>  
 3         <servlet-name>Log4JInitServlet</servlet-name>  
 4         <servlet-class>com.rain.log.Log4JInitServlet</servlet-class>  
 5         <init-param>  
 6             <param-name>log4j-properties-location</param-name>  
 7             <param-value>/WEB-INF/log4j.properties</param-value>  
 8         </init-param>  
 9         <load-on-startup>1</load-on-startup>  
10     </servlet>

log4j.properties

# Root logger option
log4j.rootLogger=INFO, stdout,errorlog
 
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# write error logger to error.log file
log4j.logger.org.springframework = WARN 
log4j.logger.org.hibernate=WARN 
log4j.appender.errorlog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlog.File = /home/rain/\u6587\u6863/error.log
log4j.appender.errorlog.Append = true
log4j.appender.errorlog.Threshold = INFO
log4j.appender.errorlog.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlog.encoding=UTF-8
log4j.appender.errorlog.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
#%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
Log4JInitServlet.java
 1 package com.rain.log;
 2 
 3 import java.io.File;  
 4 import java.io.IOException;  
 5 
 6 import javax.servlet.ServletConfig;  
 7 import javax.servlet.ServletContext;  
 8 import javax.servlet.ServletException;  
 9 
10 import javax.servlet.http.HttpServlet;  
11 import javax.servlet.http.HttpServletRequest;  
12 import javax.servlet.http.HttpServletResponse;  
13 
14 import org.apache.log4j.BasicConfigurator;  
15 import org.apache.log4j.PropertyConfigurator;  
16 
17 /** 
18  * Servlet implementation class Log4JInitServlet 
19  */  
20 
21 public class Log4JInitServlet extends HttpServlet {  
22     private static final long serialVersionUID = 1L;  
23 
24     /** 
25      * @see HttpServlet#HttpServlet() 
26      */  
27     public Log4JInitServlet() {  
28         super();  
29         // TODO Auto-generated constructor stub  
30     }  
31 
32     /** 
33      * @see Servlet#init(ServletConfig) 
34      */  
35     public void init(ServletConfig config) throws ServletException {  
36         System.out.println("Log4JInitServlet 正在初始化 log4j日志设置信息");  
37         String log4jLocation = config.getInitParameter("log4j-properties-location");  
38 
39         ServletContext sc = config.getServletContext();  
40 
41         if (log4jLocation == null) {  
42             System.err.println("*** 没有 log4j-properties-location 初始化的文件, 所以使用 BasicConfigurator初始化");  
43             BasicConfigurator.configure();  
44         } else {  
45             String webAppPath = sc.getRealPath("/");  
46             String log4jProp = webAppPath + log4jLocation;  
47             File yoMamaYesThisSaysYoMama = new File(log4jProp);  
48             if (yoMamaYesThisSaysYoMama.exists()) {  
49                 System.out.println("使用: " + log4jProp+"初始化日志设置信息");  
50                 PropertyConfigurator.configure(log4jProp);  
51             } else {  
52                 System.err.println("*** " + log4jProp + " 文件没有找到, 所以使用 BasicConfigurator初始化");  
53                 BasicConfigurator.configure();  
54             }  
55         }  
56         super.init(config);  
57     }  
58 
59     /** 
60      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
61      */  
62     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
63         // TODO Auto-generated method stub  
64     }  
65 
66     /** 
67      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
68      */  
69     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
70         // TODO Auto-generated method stub  
71     }  
72 
73 }

java文件中:

1     Logger logger=Logger.getLogger(getClass());
2     logger.info("info");
3     logger.error("error");

Log4j基本使用方法

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显 示内容。

2.1、定义配置文件

其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:
1.配置根Logger,其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, …

 

其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指B日志信息输出到哪个地方。您可以同时指定多个输出目的地。

2.配置日志信息输出目的地Appender,其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class  
log4j.appender.appenderName.option1 = value1  
…  
log4j.appender.appenderName.option = valueN

 

其中,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台),  
org.apache.log4j.FileAppender(文件),  
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),  
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

 

3.配置日志信息的格式(布局),其语法为:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class  
log4j.appender.appenderName.layout.option1 = value1  
…  
log4j.appender.appenderName.layout.option = valueN

 

其中,Log4j提供的layout有以e几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),  
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

 

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL  
%r 输出自应用启动到输出该log信息耗费的毫秒数  
%c 输出所属的类目,通常就是所在类的全名  
%t 输出产生该日志事件的线程名  
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”  
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

 

2.2、在代码中使用Log4j

1.得到记录器

使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

public static Logger getLogger( String name)

 

通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

 

2.读取配置文件

当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:

BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。  
PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。  
DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

 

3.插入记录信息(格式化日志信息)

当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:

Logger.debug ( Object message ) ;  
Logger.info ( Object message ) ;  
Logger.warn ( Object message ) ;  
Logger.error ( Object message ) ;

 

2.3、日志级别

每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:

A:off 最高等级,用于关闭所有日志记录。
B:fatal 指出每个严重的错误事件将会导致应用程序的退出。
C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm 表明会出现潜在的错误情形。
E:info 一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all 最低等级,用于打开所有日志记录。

上面这些级别是定义在org.apache.log4j.Level类中。Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。通过使用日志级别,可以控制应用程序中相应级别日志信息的输出。例如,如果使用b了info级别,则应用程序中所有低于info级别的日志信息(如debug)将不会被打印出来。

 

简易Java日志(Log)输出工具的封装

平时 Java 项目的开发通常需要统一管理日志(Log)的输出,例如控制日志信息输送的目的地(控制台、文件等),控制每一条日志的输出格式,把日志分为不同的级别等。常用的比较成熟的 Java 日志管理工...
  • xietansheng
  • xietansheng
  • 2017年04月22日 23:22
  • 2456

Java打log日志

最近写Java工程,需要在客户端打上log,以便进行出错追踪。刚开始试了一些log4j之类的包,想着功能强大点儿。但是由于配置、版本不兼容、傻叉Windows等一系列问题,最终放弃,干脆直接采用Jav...
  • puppylpg
  • puppylpg
  • 2016年08月31日 17:37
  • 7372

Java使用Log日志系统(common-logging和log4j)

使用common-logging和log4j准备开一大项目的话,日志系统必不可少。Apache为了让众多的日志工具有一个相同操作方式,实现了一个通用日志工具包:commons-logging。而Log...
  • geekun
  • geekun
  • 2016年05月13日 21:20
  • 7137

Log日志框架的学习.正确使用日志的10个技巧

1)选择正确的Log开源框架          在代码中为了知道程序的行为的状态, 我们一般会打印一条日志: log.info("Happy and carefree logging")...
  • feir23
  • feir23
  • 2016年05月24日 09:58
  • 3950

Linux中java log输出中文乱码

比如这样一段代码: logger.debug("中文乱码?Chinese");输出结果是这样的: 2016-06-12 10:24:46,130:DEBUG main (CleanupTaskTe...
  • ClementAD
  • ClementAD
  • 2016年06月12日 10:48
  • 5590

log 输出日志

logback系列之一:输出日志到控制台  logback系列之二:输出日志到文件  logback系列之三:输出日志到文件(滚动)  logback系列之四:输出日志到不同文件  为...
  • u013851082
  • u013851082
  • 2017年05月27日 16:58
  • 602

常用的Log日志打印与输出

/** * log日志 * @author Jenly * */ public class LogUtils { private static final String TAG = "J...
  • jenly121
  • jenly121
  • 2014年06月24日 10:27
  • 5610

Java Web - 日志-log4j(一)--写到控制台、写到log文件

欢迎使用Markdown编辑器写博客一:log4j简介:1: 配置文件 Log4J配置文件的基本格式如下: Appender 为日志输出目的地,Log4j提供的appender有以下几种: or...
  • luckycz
  • luckycz
  • 2015年09月24日 16:43
  • 4868

linux 查询 java 日志输出两份日志

在 linux 中,我们经常会在运行一个 jar 程序之后随即打开它的 tail -f /xxx/out.log 功能,然后我们就发现一个奇怪的现象,就是所有的日志都被输出两行,而且日志的内容都是一样...
  • tengdazhang770960436
  • tengdazhang770960436
  • 2015年01月14日 14:58
  • 6863

良好的日志记录规范

平常我的系统开发运行过程中,记录关键信息对于完善和修改提出了明确的建议。但是在现实的一些应用中的日志记录比较混乱,导致无法准确快速的定位问题发生的地方和问题发生的时候以及问题发生的场景。我就依据我平时...
  • Scalzdp
  • Scalzdp
  • 2014年04月28日 11:26
  • 13495
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java log日志输出
举报原因:
原因补充:

(最多只允许输入30个字)