Log4j简单配置
Log4j是一组强大的日志组件,在项目中时常需要用它提供一些信息,这两天学习了一下它的简单配置。
第一步,我们需要导入log4j-1.2.14.jar到lib目录下
第二步,在src下建立log4j.properties文件。添加如下内容
- log4j.properties
- log4j.rootLogger =INFO,stdout
- log4j.logger.sedion=INFO,db
- log4j.logger.W=WARN,W
- log4j.logger.E=ERROR,E
- #输出到控制台
- 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{ABSOLUTE} %5p %c{1}:%L - %m%n
- #输出WARN级别日志
- log4j.appender.W =org.apache.log4j.RollingFileAppender
- log4j.appender.W.File =${catalina.home}/logs/Test/Test_W.log
- log4j.appender.W.Append =true
- log4j.appender.W.Threshold =WARN
- log4j.appender.W.layout = org.apache.log4j.PatternLayout
- log4j.appender.W.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
- #输出ERROR级别日志
- log4j.appender.E = org.apache.log4j.RollingFileAppender
- log4j.appender.E.File = ${catalina.home}/logs/Test/Test_E.log
- log4j.appender.E.Append = true
- log4j.appender.E.layout = org.apache.log4j.PatternLayout
- log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n
- #######################
- # JDBC Appender
- #######################
- log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
- log4j.appender.db.BufferSize=1
- log4j.appender.db.driver=com.mysql.jdbc.Driver
- log4j.appender.db.URL=jdbc:mysql://localhost:3306/test
- log4j.appender.db.user=root
- log4j.appender.db.password=123
- log4j.appender.db.sql=insert into operate_log(class,method,createtime,loglevel,logmsg,username) values ("%C","%M","%d{yyyy-MM-dd HH\:mm\:ss}","%p","%m","%X{username}")
- log4j.appender.db.layout=org.apache.log4j.PatternLayout
新建一个数据库test和一张日志表operate_log。
- 可以看到数据库中有个username动态字段,所以我们要写个过滤器
- package config.filter;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.log4j.MDC;
- public class Log4jFilter implements Filter
- {
- private final static int DEDAULT_USERID = 0;
- public void destroy()
- {
- }
- public void doFilter(ServletRequest req, ServletResponse rep,
- FilterChain chain) throws IOException, ServletException
- {
- HttpServletRequest request = (HttpServletRequest)req;
- String username = request.getParameter("username");
- if(username == null)
- {
- MDC.put("username", DEDAULT_USERID);
- }
- else
- {
- System.out.println("登陆名--"+username);
- MDC.put("username", username);
- }
- chain.doFilter(req, rep);
- }
- public void init(FilterConfig arg0) throws ServletException
- {
- }
- }
然后需要在web.xml中进行log4j.properties和过滤器的配置.
- <!-- log4j配置 -->
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>classpath:log4j.properties</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
- <!-- 过滤器配置 -->
- <filter>
- <filter-name>LogResFilter</filter-name>
- <filter-class>config.filter.Log4jFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>LogResFilter</filter-name>
- <url-pattern>*.do</url-pattern>
- </filter-mapping>
第三步,至此我们配置已经全部完成,简单写个登陆来验证一下。
jsp页面很简单,代码便不列出来了.
写个登陆实现类.
- package sedion.zhr.controller;
- import java.util.List;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.log4j.Logger;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import sedion.zhr.beans.UserBean;
- import sedion.zhr.service.iml.UserServiceIml;
- @Controller
- @RequestMapping("/action")
- public class LoginController
- {
- private static final Logger log_w= Logger.getLogger("W");
- private static final Logger log_e = Logger.getLogger("E");
- private Log logger = LogFactory.getLog(this.getClass());
- @Resource(name = "UserService")
- private UserServiceIml serviceIml;
- @RequestMapping("/login.do")
- public String login(UserBean bean,HttpServletRequest request,HttpServletResponse response) throws Exception
- {
- List<UserBean> beans = this.serviceIml.finduser(new String[]{bean.getUsername(),bean.getPassword()});
- if(!beans.isEmpty())
- {
- log_w.warn("登陆成功--");
- logger.info("登陆成功");
- return "/index";
- }
- else
- {
- log_e.error("登陆失败--");
- logger.error("登陆失败");
- return "/login";
- }
- }
- }
将项目配置到tomcat上,启动项目.
可以看到在安装tomcat文件夹下的logs文件夹里面出现个Test文件夹,里面有两个文本,初始大小都是0kb.
然后我们各登陆成功,登陆失败一次。观察到控制台上输出
然后发现先前两个文本大小变为1kb,里面各有成功失败的信息。
打开数据库表里面多了两条数据。
测试成功。
最后记录一下log4j配置中相关属性
log4j日志常见输出级别有4级,由高到低依次是ERROR、WARN、INFO、DEBUG。
日志输出目的地
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
打印参数
- %m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
Log4j简单配置的更多相关文章
- [log4j]log4j简单配置
步骤: 1.导入jar包:log4j-1.2.17.jar 2.编写log4j配置文件:log4j.properties ### set log levels - for more verbose l ...
- Log4j简单配置解析
log4j.rootLogger=ERROR, stdoutlog4j.logger.tk.mybatis.simple.mapper=TRACElog4j.appender.stdout=org.a ...
- (转)log4j(七)——log4j.xml简单配置样例说明
背景:在公司中警察需要做技术支持,查看日志,而查看日志首先要自己清楚日志是如何生成的,所以有必要知道日志的前世今生! 转载出处:http://www.cnblogs.com/godtrue/p/644 ...
- log4j(七)——log4j.xml简单配置样例说明
一:测试环境与log4j(一)--为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 (1)这里栗子有一点特别呀!给出了包名唉!想必有用,是的,配置文件中要特别说明一下 ...
- Log4j slf4j 配置简单介绍
Log4j slf4j 配置简单介绍 先借鉴一篇很好的文章 为什么要使用SLF4J而不是Log4J import org.slf4j.Logger; import org.slf4j.LoggerFa ...
- log4j.xml简单配置实现在控制台打印sql执行语句【加注释】
转: log4j.xml简单配置实现在控制台打印sql执行语句 2017年09月27日 13:02:34 艾然丶 阅读数 8804 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协 ...
- (转)log4j(六)——log4j.properties简单配置样例说明
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 (1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清 ...
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- Log4J简单使用
一.一般会将commons-logging和Log4j一起使用 原因:1.commons-logging功能较弱 2.log4j功能强大. 所需jar: log4j-1.2.16.ja ...
随机推荐
- c# 函数练习;结构体、枚举类型
* 结构体 1.就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 注意:枚举类型和结构体都属于值类型. 2.定义的方法: struct student { public in ...
- cout输出字符串指针
先给出通过字符型指针输出字符串的示例代码,如下: #include <iostream>using std::cout;using std::endl; int main(){ const ...
- Microsoft Internet Explorer 内存破坏漏洞(CVE-2013-3193)(MS13-059)
漏洞版本: Microsoft Internet Explorer 6 - 10 漏洞描述: BUGTRAQ ID: 61678 CVE(CAN) ID: CVE-2013-3193 Windows ...
- [QT]构建正则表达式测试
正则表达式是个强大的东西 暂时先记录一个用法: QString str = "Peak memory: KEY s"; QString data = "Peak memo ...
- 使用QJM部署HDFS HA集群
一.所需软件 1. JDK版本 下载地址:http://www.oracle.com/technetwork/java/javase/index.html 版本: jdk-7u79-linux-x64 ...
- Struct.xml Action配置
<package name="default" namespace="/" extends="struts-default"> ...
- SQL 查询条件放在LEFT OUTER JOIN 的ON语句后与放在WHERE中的区别
这两种条件放置的位置不同很容易让人造成混淆,以致经常查询出莫名其妙的结果出来,特别是副本的条件与主表不匹配时,下面以A,B表为例简单说下我的理解. 首先要明白的是: 跟在ON 后面的条件是对参与左联接 ...
- dede 如何去除[field:title/]里面出现的b标签
调用[field:title/]标签,两边加<b>怎么去掉<b> 怎么回事??? 最近更新dede的版本后,调用[field:title/]标签,生成的标题两边会自动在标题两边 ...
- 【设计模式 - 16】之迭代器模式(Iterator)
1 模式简介 迭代器模式是JAVA中非常常用的模式,List.Map.Set等常见集合中都封装了迭代器Iterator. 迭代器模式的介绍: 迭代器模式用于顺序访问集合对象中的元素,而不需要 ...
- Java Web中资源的访问路径
在web应用中,以“/”开头的是绝对路径,不以“/”开头的是相对路径. 在服务器端,通常都使用绝对路径.例如web.xml.struts.xml.servlet等的访问路径都是以“/”开始. 服务 ...