篇十二:日志整理

 一、使用环境搭建

  1、jar包引入--maven

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency> 
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging </artifactId>
    <version>1.1.3</version>
</dependency>

  2、配置拦截器,获取日志的公共部分

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.MDC;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.druid.util.StringUtils;

public class LogsInterceptor implements HandlerInterceptor
{

    @Override
    public void afterCompletion(HttpServletRequest arg0,
            HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        
    }

    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
            Object arg2, ModelAndView arg3) throws Exception {
        
    }
    
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse arg1,
            Object arg2) throws Exception {
        //获取用户userId
        String userId = req.getParameter("userId");
        //获取请求的IP
        String ip = req.getRemoteAddr();
     //获取请求的路径
        String url = req.getServletPath();
        //放入MDC
        if(StringUtils.isEmpty(userId)) userId="test";  //开发阶段,无法从缓存中获取用户信息
        MDC.put("userId",userId);
        MDC.put("ip",ip);
        return true;
    }

}

  配置拦截器:

  <mvc:mapping path="/mobile/**"/>:配置拦截器拦截路径
  <mvc:exclude-mapping path="/loginpage/**"/> :配置不拦截路径,可以同时配置多个
  建议:拦截的路径放在前面,不拦截的路径配置在后面
  <mvc:interceptors>  
        <mvc:interceptor>  
            <mvc:mapping path="/mobile/**" />
             <!--<mvc:exclude-mapping  path="/loginpage/**"/> -->
            <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->  
            <bean class="com.guduo.mobile.log.LogsInterceptor"/>  
        </mvc:interceptor>  
    </mvc:interceptors>

  3、参考日志表

  操作日志:

CREATE TABLE `tbl_mobile_operation_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `userId` varchar(64) DEFAULT NULL COMMENT '用户ID',
  `userName` varchar(64) DEFAULT NULL COMMENT '用户名',
  `operationMoudle` int(2) DEFAULT NULL COMMENT '操作模块 ',
  `type` int(1) DEFAULT NULL COMMENT '操作类型 (1:新增,2:更新,3:删除,4:查询,5:上传,6:下载,7:导出)',
  `status` int(1) DEFAULT NULL COMMENT '操作状态 (1:成功,2:失败)',
  `ip` varchar(100) DEFAULT NULL COMMENT 'IP地址',
  `content` varchar(3000) DEFAULT NULL COMMENT '操作内容 ',
  `errorMsg` varchar(3000) DEFAULT NULL COMMENT '失败原因 ',
  `createTime` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2451249 DEFAULT CHARSET=utf8 COMMENT='移动端操作日志';

  登录日志

CREATE TABLE `tbl_login_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `userId` varchar(40) NOT NULL COMMENT '用户id',
  `type` int(2) NOT NULL COMMENT '操作类型(1:APP登陆,2:后台登陆,3:新闻发布系统登陆)',
  `status` int(1) NOT NULL DEFAULT '1' COMMENT '操作状态(1:成功,2:失败)',
  `ip` varchar(30) NOT NULL COMMENT 'IP地址',
  `errorMsg` varchar(100) DEFAULT NULL COMMENT '失败原因',
  `createTime` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1468 DEFAULT CHARSET=utf8 COMMENT='登陆日志表';

 

二、常用日志类型

    org.apache.log4j.ConsoleAppender(控制台), 
    org.apache.log4j.FileAppender(文件), 
    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), 
   org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方),  org.apache.log4j.jdbc.JDBCAppender(用于数据库),  org.apache.log4j.net.SMTPAppender(发送日志给邮件),  org.apache.log4j.RollingFileAppender(应用于socket)

 

三、Layout属性

1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),

2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式), 

3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), 

4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息

转换字符

表示的意思

c

用于输出的记录事件的类别, 通常就是所在类的全名。例如,对于类别名称"a.b.c" 模式  %c{2} 会输出 "b.c"

C

用于输出呼叫者发出日志请求的完全限定类名。例如,对于类名 "org.apache.xyz.SomeClass", 模式 %C{1} 会输出 "SomeClass".

d

用于输出的记录事件的日期。例如, %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.

F

用于输出被发出日志记录请求,其中的文件名

l

用于将产生的日志事件调用者输出位置信息, 包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

L

用于输出从被发出日志记录请求的行号

m

用于输出使用日志事件相关联的应用程序提供的消息

M

用于输出发出日志请求所在的方法名称

n

输出平台相关的行分隔符或文字

p

用于输出的记录事件的优先级

r

用于输出毫秒从布局的结构经过直到创建日志记录事件的数目

t

用于输出生成的日志记录事件的线程的名称

x

用于与产生该日志事件的线程相关联输出的NDC(嵌套诊断上下文)

X

在X转换字符后面是键为的MDC。例如  X{clientIP} 将打印存储在MDC对键clientIP的信息

%

文字百分号 %%将打印%标志

四、配置说明(配置范围)

1、  完善的配置文件包含:

l  级别:debug、info、warn、error、fatal和log

DEBUG<INFO <WARN<ERROR<FATAL。

l  Appender:参考3.1

l  Layout:参考3.2

2、  配置范围:

l  全局:log4j.rootLogger=INFO[s1] ,A1[s2] ,DRF

l  指定路径:log4j.logger[s3] .com.ibatis[s4] =INFO,DEBUG

3、  Class类创建日志对象命名:

l  log4j:private  static  Logger  log = Logger.getLogger(ClassName.class);

l  Apache:private static Log  log = LogFactory.getLog(ClassName.class);

建议使用Apache,maven导入jar包commons-logging


注释说明:   

  [s1]日志级别

   [s2]独立的配置文件的名称,一个配置文件可包含多个独立的子配置文件

   [s3]区别“rootLogger”,表明是指定路径,以“.”结束

   [s4]包路径,参考Class类属性Package

 

五、输出控制台

 

log4j.logger.com.guduo.mobile.controller.pay=INFO,CONSOLE

 

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.Threshold[s1] =DEBUG

log4j.appender.CONSOLE.Target=System.out

log4j.appender.CONSOLE.Encoding=UTF-8

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

log4j.appender.CONSOLE.layout.ConversionPattern=[service] %-5p %d{yyyy-MM-dd HH:mm:ss} - %c -%-4r [%t]  - %m%n


 [s1]最低输出级别

 

六、输出数据库

log4j.logger.com.guduo.mobile.controller.pay=INFO,DATABASE

 

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DATABASE.URL=jdbc:mysql://192.168.1.91:3306/test

log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver

log4j.appender.DATABASE.user=root[s1] 

log4j.appender.DATABASE.password=abcd%1234

log4j.appender.DATABASE.sql= INSERT INTO tbl_mobile_operation_log [s2] (operatorId,operationMoudle,type,status,ip,content,errorMsg,createTime) VALUES ('%X{userId}',%X{operationMoudle},%X{type},%X{status},'%X{ip}','%m','%X{errorMsg}'[s3] ,'%d{yyyy-MM-dd HH:mm:ss}')

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


 [s1]数据库连接属性,每列不要有空格

 [s2]需要有空格

 [s3]%X{MDC中定义的属性名},是否有引号,取决于数据库列属性,int型不需要,varchar型需要

注意:单行输完,结尾不能有空格,sql除外

 

七、输出日志文件

 

log4j.logger.com.guduo.mobile.controller.pay=INFO,FILE

 

log4j.appender.FILE=org.apache.log4j.FileAppender Log4j

log4j.appender.FILE.File= D:/logs/guduo-service-user.log

log4j.appender.FILE.Append[s1] =true

log4j.appender.FILE.Encoding=UTF-8

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

log4j.appender.FILE.layout.ConversionPattern=[service] %-5p %d{yyyy-MM-dd HH:mm:ss} - %c -%-4r [%t]  - %m%n


 [s1]默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容

 

八、输出日志文件(每天新建)

log4j.logger.com.guduo.mobile.controller.pay=INFO,A1

 

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender

log4j.appender.A1.File=D:/logs/guduo-service-user.log

log4j.appender.A1.Encoding=UTF-8

log4j.appender.A1.DatePattern[s1] ='.'yyyy-MM-dd

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

log4j.appender.A1.layout.ConversionPattern=[service] %-5p %d{yyyy-MM-dd HH:mm:ss} - %c -%-4r [%t]  - %m%n

九、输出日志文件(达到指定大小新建)

log4j.logger.com.guduo.mobile.controller.pay=INFO,File

 

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.Threshold[s2] =INFO

log4j.appender.ROLLING_FILE.File= D:/logs/guduo-service-user.log

log4j.appender.ROLLING_FILE.Append[s3] =true

log4j.appender.CONSOLE_FILE.Encoding=UTF-8

log4j.appender.ROLLING_FILE.MaxFileSize[s4] =10KB

log4j.appender.ROLLING_FILE.MaxBackupIndex[s5] =10

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

log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


  •  [s1]
  • '.'yyyy-MM,对应monthly(每月)
  • '.'yyyy-ww,对应weekly(每周)
  • '.'yyyy-MM-dd,对应daily(每天)
  • '.'yyyy-MM-dd-a,对应half-daily(每半天)
  • '.'yyyy-MM-dd-HH,对应hourly(每小时)
  • '.'yyyy-MM-dd-HH-mm,对应minutely(每分钟)

 

 [s2]消息输出的最低级别

 [s3]:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容

 [s4]大小上限

 [s5]最大备份数

 

 

强调:

  日志文件的输出可以是指定的路径:D:/logs/guduo-service-user.log

  也可以是相对tomcat的位置:${catalina.base}/logs/guduo-mobile.log      ------:tomcat/logs

posted @ 2016-10-26 12:06  刘广平  阅读(150)  评论(0)    收藏  举报