转:

使用log4j将日志输送到控制台、文件或数据库中

2018-09-07 00:45:08 keep@ 阅读数 2880更多

分类专栏: 其它
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

1、log4j简述

log4j是一个用Java编写的可靠,快速和灵活的日志框架(API),是Apache一个开源项目。

Log4j是高度可配置的,并可通过在运行时的外部文件配置。它根据记录的优先级别,并提供机制,以指示记录信息到许多的目的地,诸如:数据库,文件,控制台,UNIX系统日志等。

日志级别有:

  • ALL              打印所有信息
  • DEBUG        打印调试信息
  • ERROR        打印错误信息
  • FATAL  指定非常严重的错误事件,这可能导致应用程序中止
  • INFO    指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
  • OFF    这是最高等级,为了关闭日志记录
  • TRACE    指定细粒度比DEBUG更低的信息事件
  • WARN    指定具有潜在危害的情况

一般常用的级别是DEBUG级别

使用log4j需要在项目中导入log4j的jar包,点击这里下载它的jar包。

将jar包导入项目之后,在项目的classpath路径下新建名为log4j.properties的配置文件,用于配置log4j。

下面就一一介绍如何使用log4j将日志输送到不同目的地。

1、输送到普通txt文件

  1. #表示该文件在D盘的log目录下
  2. log=D:/log
  3. # 根日志记录器(logger)的级别定义为DEBUG并连接附加器命名为FILE
  4. log4j.rootLogger = DEBUG, FILE
  5.  
  6. # 附加器(appender)File是定义为org.apache.log4j.FileAppender并写入到一个名为“log.txt”的文件中
  7. log4j.appender.FILE=org.apache.log4j.FileAppender
  8. log4j.appender.FILE.File=${log}/log.txt
  9.  
  10. # 定义的布局模式是%m%n,这意味着每打印日志消息之后,将加上一个换行符
  11. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
  12. log4j.appender.FILE.layout.conversionPattern=%m%n

2、输送到格式化的html文件

  1. #表示该文件在D盘的log目录下
  2. log=D:/log
  3. log4j.rootLogger = DEBUG, FILE
  4.  
  5. # Define the file appender
  6. # 附加器(appender)File是定义为org.apache.log4j.FileAppender并写入到一个名为“log.html”的文件中
  7. log4j.appender.FILE=org.apache.log4j.FileAppender
  8. #生成html文件
  9. log4j.appender.FILE.File=${log}/log.html
  10.  
  11. log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
  12. log4j.appender.FILE.layout.Title=HTML Layout Example
  13. log4j.appender.FILE.layout.LocationInfo=true

3、输送到控制台

  1. #定义LOG输出级别、输出到控制台、文件
  2. log4j.rootLogger = DEBUG,STDOUT
  3.  
  4. # 定义控制台 STDOUT appender
  5. log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
  6. log4j.appender.STDOUT.Target=System.out
  7.  
  8. #定义日志输出目的地为控制台
  9. log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
  10. log4j.appender.STDOUT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%m%n

4、输送到数据库

这里以mysql数据库为例,将日志输送到数据库,实质就是讲日志存储到数据表中,为此,我们先建立一张用于存储日志的表

  1. CREATE TABLE LOGS
  2. (USER_ID VARCHAR(20),
  3. DATED DATETIME,
  4. LOGGER VARCHAR(50),
  5. LEVEL VARCHAR(10),
  6. MESSAGE VARCHAR(1000)
  7. );

然后,再配置log4j.properties

  1. # Define the root logger with appender file
  2. log4j.rootLogger = DEBUG, DB
  3.  
  4. # Define the DB appender
  5. log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
  6. #定义数据库url
  7. log4j.appender.DB.URL=jdbc:mysql://127.0.0.1:3306/formybatis?characterEncoding=UTF-8
  8. #定义数据库驱动
  9. log4j.appender.DB.driver=com.mysql.jdbc.Driver
  10.  
  11. #定义用户名和密码
  12. log4j.appender.DB.user=root
  13. log4j.appender.DB.password=ok
  14.  
  15. # 设置存储到log表的insert语句
  16. log4j.appender.DB.sql=INSERT INTO LOGS(user_id,dated,logger,level,message) VALUES("%x","%d{yyyy-MM-dd HH:mm:ss}","%C","%p","%m")
  17.  
  18. # Define the layout for file appender
  19. log4j.appender.DB.layout=org.apache.log4j.PatternLayout

2、大致了解一下log4j2

log4j2是重新架构的一款日志组件,他抛弃了之前log4j的不足,以及吸取了优秀的logback的设计重新推出的一款新组件。log4j2的社区活跃很频繁而且更新的也很快。

log4j是通过一个.properties的文件作为主配置文件的,而现在的log4j 2则已经弃用了这种方式,采用的是.xml,.json或者.jsn这种方式来做,可能这也是技术发展的一个必然性,毕竟properties文件的可阅读性真的是有点差。

使用log4j将日志输送到控制台、文件或数据库中的更多相关文章

  1. 如何保存PDF、Word和Excel文件到数据库中

    在项目中,有时候我们很需要把PDF.Word和Excel文档等等上传到数据库,以便日后使用.今天这篇文章向大家讲解如何将这些文件保存到数据库的. 详细步骤 第一步:打开数据库,单击新建查询,创建一个名 ...

  2. log4j将日志输出到控制台,文件,邮件

    #将日志写到文件 log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=e\:\ ...

  3. 采用SHELL,通过SQL LOAD导入一定格式的txt文件至数据库中

    1. 准备工作,window中可直接通过sqlload直接导入文件,linux下,需要有sqlload的相关软件. 2. SQL脚本(MID_DFDZ.ctl) LOAD DATA INTO TABL ...

  4. Log4Net的应用教程之保存日志到数据库中

    关于Log4Net的应用,网上有很多教程,但大多数都是拷贝复制,有些按照他的代码来,运行起来发现也出不来效果,但是Log4net的作用实在是非常大的,或者这里说的不对,应该说系统的日志功能是很重要的也 ...

  5. 使用 hibernate 根据映射文件生成数据库表

    为了更好的显示效果,可以在hibernate.cfg.xml配置文件的<session-factory>标签里加入以下内容: 显示sql语句和格式化显示sql语句: <propert ...

  6. 【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中

    [exp/imp]将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后 ...

  7. 转-【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中

    原帖地址:http://blog.csdn.net/lihuarongaini/article/details/71512116 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完 ...

  8. Pandas dataframe数据写入文件和数据库

    转自:http://www.dcharm.com/?p=584 Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作,DataFr ...

  9. struts2解决动态多文件上传的问题(上传文件与数据库字段一一对应)(转)

    struts2多文件上传我想只要会用struts2的朋友都不会陌生,但是怎么在action中根据用户上传的文 件把文件路径写到数据库中对应的字段上呢?ps:我的意思是这样,页面上有固定的5个上传文件的 ...

随机推荐

  1. 51nod 1396 还是01串

    给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0..k - 1]中的0的个数与子串s[k..n - 1]中1的个数相等. 注意: (1) 如果 ...

  2. 手把手教用C#编写Windows服务 并控制服务 安装、启动、停止、卸载

    Windows服务 Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动, ...

  3. P1772 [ZJOI2006]物流运输[DP+最短路]

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...

  4. P2756 飞行员配对方案问题[二分图最大匹配]

    题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外籍飞行员.在众多的飞行员中,每一名 ...

  5. 实现多层DIV叠加的js事件穿透

    前几天做的一个功能:在地图上加载标注,这个标注是列表,就直接放的 DIV. 后来发现,当鼠标在这个标注上面的时候,滚动鼠标滚轮,地图的缩放功能失效. 想了下,应该是最上面的标注 DIV 拦截了滚轮滚动 ...

  6. [Apio2010]patrol 巡逻

    1912: [Apio2010]patrol 巡逻 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2541  Solved: 1288[Submit][S ...

  7. Union-Find(并查集): Quick union improvements

    Quick union improvements1: weighting 为了防止生成高的树,将smaller tree放在larger tree的下面(smaller 和larger是指number ...

  8. PHP——最新号码归属地数据库

    前言 最近在忙的一个项目,为了数据安全,不能够使用任何第三方的接口~ 号码库 | https://github.com/wangyang0210/Phone-Number-Range 代码 其实就是一 ...

  9. Spring源码窥探之:@Value

    1. 首先定义实体 /** * @author 70KG * @Title: Apple * @Description: 苹果实体 * @date 2018/10/22下午9:26 * @From w ...

  10. matlab的正则表达式

    第一部分——单个字符的匹配1 句点符号 '.' ——匹配任意一个(只有一个)字符(包括空格).例如:t.n,它匹配tan. ten.tin和ton,还匹配t#n.tpn甚至t nMatlab例子程序: ...