没有接触过的,先了解一下:log4j教程
部分内容来:log4j教程 感谢!
需要导入包:
log包:log4j-12.17.jar
第一步:web.xml配置
log4jConfigLocation
/WEB-INF/log4j.xml
controller
controller-log
loggingLevel
info
org.springframework.web.util.Log4jConfigListener
第二步log4j.xml配置
(配置文件可以有两种方式,一种是xml,一种是properties。个人比较喜欢xml,一目了然)
先讲解一下核心对象:
logger对象: Logger对象负责捕获日志信息及它们存储在一个空间的层次结构。
Appender对象:下位层提供Appender对象。Appender对象负责发布日志信息,以不同的首选目的地,如数据库,文件,控制台,UNIX系统日志等。
layout对象: 该层提供其用于格式化不同风格的日志信息的对象。布局层提供支持Appender对象到发布日志信息之前。
打个比方:logger是个情报站,负责收集他 所在地方(用name="xxx包"指定)下的所有信息。appender是发送出去的方式,如写信(FileAppender)、电报(SMTPAppender)等多种。layout就是发送内容以什么格式书写,如自定义格式(PatternLayout),html(HTMLLayout)格式。
class="org.apache.log4j.DailyRollingFileAppender">
class="org.apache.log4j.DailyRollingFileAppender">
运行就能看到common-default.log里面有操作日志
自己输出日志:
我controller包下某各类中:
package com.wzw.controller;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/account")
public class AccountController {
private static Logger logger =LoggerFactory.getLogger(AccountController.class);
@ResponseBody
@RequestMapping("/login")
public String login(HttpSession session){
logger.info("请求登录");
logger.debug("debug");
logger.warn("warn");
}
}
访问这个controller,就会记录日志,因为有log4j中有两个logger配置记录controller包下的日志,所以输出到两个logger下(输出方式)。
appender选项:
AppenderSkeleton
AsyncAppender
ConsoleAppender
DailyRollingFileAppender
ExternallyRolledFileAppender
FileAppender
JDBCAppender
JMSAppender
LF5Appender
NTEventLogAppender
NullAppender
RollingFileAppender
SMTPAppender
SocketAppender
SocketHubAppender
SyslogAppender
TelnetAppender
WriterAppender
layout选项:
DateLayout
HTMLLayout
PatternLayout
SimpleLayout
XMLLayout
模式转换字符:
下表说明了以上模式使用的字符和所有其他字符,可以在自定义模式中使用:
转换字符
表示的意思
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
用于将产生的日志事件调用者输出位置信息
L
用于输出从被发出日志记录请求的行号
m
用于输出使用日志事件相关联的应用程序提供的消息
M
用于输出发出日志请求所在的方法名称
n
输出平台相关的行分隔符或文字
p
用于输出的记录事件的优先级
r
用于输出毫秒从布局的结构经过直到创建日志记录事件的数目
t
用于输出生成的日志记录事件的线程的名称
x
用于与产生该日志事件的线程相关联输出的NDC(嵌套诊断上下文)
X
在X转换字符后面是键为的MDC。例如 X{clientIP} 将打印存储在MDC对键clientIP的信息
%
文字百分号 %%将打印%标志
格式修饰符:
默认情况下,相关资料原样输出。然而,随着格式修饰符的帮助下,可以改变最小字段宽度,最大字段宽度和对齐。
下表涵盖了各种各样的修饰符的情况:
Format modifier
left justify
minimum width
maximum width
注释
%20c
false
20
none
用空格左垫,如果类别名称少于20个字符长
%-20c
true
20
none
用空格右垫,如果类别名称少于20个字符长
%.30c
NA
none
30
从开始截断,如果类别名称超过30个字符长
%20.30c
false
20
30
用空格左侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。
%-20.30c
true
20
30
用空格右侧垫,如果类别名称短于20个字符。但是,如果类别名称长度超过30个字符,那么从开始截断。
Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录
在前面介绍了几篇关于我的权限系统改进的一些经验总结,本篇继续这一系列主体,介绍如何一行代码实现重要表的操作日志记录.我们知道,在很多业务系统里面,数据是很敏感的,特别对于一些增加.修改.删除等关键的操 ...
微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
在前面的Part3中, 我介绍Policy Injection模块中内置的Call Handler的使用方法,今天则继续介绍Call Handler——Custom Call Handler,通过建立 ...
16.Linux配置环境变量和日志history和Terminal颜色和用户(IP)操作日志记录
$ vim /etc/profile #####################环境变量################################# export TZ='Asia/Shangh ...
springMVC开启声明式事务实现操作日志记录
第一步.在applicationContext-mvc.xml开启AOP注解扫描 第二步.创建增强类,实现日志记录 @Component ...
IT第二十天 - 面向对象编程思想、抽象类、异常处理、程序操作日志记录、本周总结 ★★★
IT第二十天 上午 面向对象编程思想 1.组装电脑的设计: (1)电脑的组成:显示器+机箱 (2)机箱的组成:电源+主板+硬盘 (3)主板所包含的部件:cpu+内存+PCI接口+usb接口 (4)PC ...
springAOP实现操作日志记录,并记录请求参数与编辑前后字段的具体改变
本文为博主原创,未经允许不得转载: 在项目开发已经完成多半的情况下,需要开发进行操作日志功能的开发,由于操作的重要性,需要记录下操作前的参数和请求时的参数, 在网上找了很多,没找到可行的方法.由于操作 ...
Yii2如何添加sql日志记录的配置信息
在使用Yii2框架的时候,常常会出现没有sql日志记录的问题.在代码里一句一句的打印sql语句也不现实.所以就要用文件记录起来. 在 config/web.php 里面的 log配置中增加如下配置 [ ...
.NetCore中使用AspectCore、ExceptionLess 实现AOP操作日志记录
结合前面封装的ExceptionLess,接下来使用 AspectCore 实现AOP日志处理 nuget导入AspectCore.Core .AspectCore.Extensions.Depend ...
Spring Boot分布式系统实践【基础模块构建3.3】注解轻松实现操作日志记录
日志注解 前言 spring切面的编程,spring中事物处理.日志记录常常与pointcut相结合 * * Pointcut 是指那些方法需要被执行"AOP",是由"P ...
随机推荐
给宏基装WIN8.1系统之问题与解决方法(原创)
1.采用老毛桃U盘PE进入笔记本: 2.备份桌面文件以防丢失: 3.将下载好的Win8操作系统镜像加载到虚拟光驱,最好把操作系统拷贝到笔记本硬盘上,不然可能会出现意想不到的错误: 4.打开老毛桃桌面安 ...
[shell编程]初识sed和gawk
一.sed编辑器 shell脚本最常见的用途就是处理文本文件,sed和gawk能够极大的简化需要进行的数据处理任务.sed编辑器是流编辑器,跟普通交互式文本编辑器(如vim)不同.流编辑器 ...
转: 如何用linux命令修改linux主机ip网关子网掩码
linux一般使用ifconfig命令修改linux主机的ip.网关或子网掩码. 1.命令格式: ifconfig [网络设备] [参数] 2.命令功能: ifconfig 命令用来查看和配置网络设备 ...
java并发4-单例设计方法
单例的设计方式: 第一种:非延迟加载单例类 public class Singleton { private Singleton() {} private static final Singleton ...
UVA - 1103Ancient Messages(dfs)
UVA - 1103Ancient Messages In order to understand early civilizations, archaeologists often study te ...
reflow和repaint
Web页面运行在各种各样的浏览器当中,浏览器载入.渲染页面的速度直接影响着用户体验 简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程.先来大致了解一下浏览器都 ...
SourceTree 将本地已有的git项目推送到远程git仓库
1.在远程git仓库创建对应的项目: 2.用命令行生成本地的ssh key; 3.把公钥粘贴远程仓库对应的位置: 4.SourceTree 设置远程仓库的地址: 5.把本地对应的分支推送到远程仓库: ...
Xpath定位总结
先贴上练习xpath的地址:http://www.w3school.com.cn/example/xmle/books.xml 或则也可以使用百度进行练习 1.相对定位与绝对定位 //表示相对定位,对 ...
uboot - the bootloader of linux
[转载]https://blog.csdn.net/kernel_yx/article/details/53045424 最近一段时间一直在做uboot移植相关的工作,需要将uboot-2016-7移 ...
用系统默认mail服务实现邮件发送
用系统默认mail服务实现邮件发送 1.操作步骤 第一步:设备服务器发送邮件要用的,邮箱地址,账号密码 编辑/etc/mail.rc vim /etc/mail.rc 在文件的结尾追加,账号信息配置 ...