log4j.xml配置示例
这是log4j1.x版本讲解,log4j-1.2.16.jar
1、 一般的log4j.xml的两种配置方式:
1、Logger 完成日志信息的处理
定义输出的层次和决定信息是否输出
DEBUG<INFO<WARN<ERROR
2、Appender 设置日志信息的去向
常用的:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppener(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志讯息以串流格式发送到任意指定的地方)
org.apache.log4j.JdbcAppender(将日志讯息保存到数据库中)
3、Layout 设置日志信息的输出样式
layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.SimpleLayout(包含日志讯息的级别和讯息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、执行绪、类别等讯息)
org.apache.log4j.PatterLayout(可以灵活地指定布局格式)
4、配置文件 log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<!-- 定义一个从控制台输出的日志信息 -->
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d - %c -%-4r [%t] %-5p %x - %m%n"/>
</layout>
<!--限制输出级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="DEBUG" />
<param name="levelMax" value="ERROR" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender> <appender name="File_debug" class="org.apache.log4j.FileAppender">
<param name="File" value="C:/log4j_debug.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d - %c -%-4r [%t] %-5p %x - %m%n"/>
</layout>
<!--限制输出级别 只输出DEBUG级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="DEBUG" />
<param name="levelMax" value="DEBUG" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender> <appender name="File_error" class="org.apache.log4j.FileAppender">
<param name="File" value="C:/log4j_error.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d - %c -%-4r [%t] %-5p %x - %m%n"/>
</layout>
<!--限制输出级别 只输出ERROR级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="ERROR" />
<param name="levelMax" value="ERROR" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender> <!--<logger>的定义可以将各个包中的类日志输出到不同的日志文件中-->
<!--com.litt2.log4j 目录下的日志会被打印到控制台中 -->
<!---如果在root节点也包含<appender-ref ref="CONSOLE"/> 没有additivity="false"会重复打印<level value="WARN"/>级别的日志信息 -->
<logger name="com.litt2.log4j" additivity="false">
<level value="WARN"/>
<appender-ref ref="CONSOLE"/>
</logger>
<!--<category></category>的作用和<logger>相同-->
<!--com.litt3 目录下的日志会被打印到控制台中 -->
<category name="com.litt3">
<level value="DEBUG"/>
<appender-ref ref="CONSOLE"/>
</category>
<root>
<priority value="debug"/>
<appender-ref ref="File_debug"/>
<appender-ref ref="File_error"/>
</root>
</log4j:configuration>
通过 ${catalina.base} 变量能获得tomcat的目录:
${catalina.base}/logs/psp_error.log 日志放到tomcat/logs 目录下文件名为psp_error.log
http://blog.csdn.net/longaohun/article/details/6233099
<root>和<logger> 是并列的节点,不能在root节点中包含对logger节点的映射,之前看别人写的xml文件有在root节点中包含logger节点的错误。
使用log4j 在调用其他类的方法时,会发现打印出来的行号是不正确的(自己可以试验),可以自己写方法方法处理。
public class Logger {
private Log logger;
public Logger(Log logger) {
this.logger = logger;
}
public void debug(String paramString) {
logger.debug(getFunctionName() + paramString);
}
public void debug(String paramString, Throwable t) {
logger.debug(getFunctionName() + paramString, t);
}
public void info(String paramString) {
logger.info(getFunctionName() + paramString);
}
public void info(String paramString, Throwable t) {
logger.info(getFunctionName() + paramString, t);
}
public void warn(String paramString, Throwable t) {
logger.warn(getFunctionName() + paramString, t);
}
public void warn(String paramString) {
logger.warn(getFunctionName() + paramString);
}
public void error(String paramString) {
logger.error(getFunctionName() + paramString);
}
public void error(String paramString, Throwable paramThrowable) {
logger.error(getFunctionName() + paramString, paramThrowable);
}
private String getFunctionName() {
StackTraceElement[] sts = Thread.currentThread().getStackTrace();
if (sts == null) {
return null;
}
for (StackTraceElement st : sts) {
if (st.isNativeMethod()) {
continue;
}
if (st.getClassName().equals(Thread.class.getName())) {
continue;
}
if (st.getClassName().equals(this.getClass().getName())) {
continue;
}//获取行号和类名 log4j也能显示行号,但是log4j显示的行号不准确。
return "[" + st.getClassName() + ":" + st.getLineNumber() + "] - ";
}
return null;
}
}
StackTraceElement[] sts = Thread.currentThread().getStackTrace(); 不明白可以查询jdk的API, 是去的方法的栈信息
public class LoggerFactory {
public static Logger getLogger(Class<?> clazz) {
return new Logger(LogFactory.getLog(clazz));
}
public static Logger getLogger(String loggerName) {
return new Logger(LogFactory.getLog(loggerName));
}
}
使用:
private Logger logger1 = LoggerFactory.getLogger(this.getClass()); 或者类名.class
如何使用log4j 参考 《log4j从入门到详解.pdf》
参考
http://blog.csdn.net/subuser/article/details/20645163
http://heavyz.sourceforge.net/homepage/homepage_zh/comp/notes/log4j.html
http://blog.csdn.net/xiechao240/article/details/5922208
http://www.uml.org.cn/j2ee/201311051.asp
log4j.xml配置示例的更多相关文章
- Log4j.xml配置(rolling示例)
Log4j.xml配置(很详细) <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4 ...
- log4j.properties和log4j.xml配置
>>>>1. 概述<<<< 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统 ...
- Log4j XML配置
问题描述: Log4j XML配置 问题解决: (1)编写log4j.xml配置文件 注: 如上的XML文件必须以log4j.xml文件命名,否则无法读取配置文件,同样的如果 ...
- Log4j XML 配置
Xml代码 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configurat ...
- log4j.properties 配置示例
需要的jar如下: !-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId> ...
- Log4J.xml配置详解
原文地址:https://blog.csdn.net/genyizha/article/details/74502812 Appender Appender:日志输出器,配置日志的输出级别.输出位置等 ...
- DWR日志 在log4j.xml配置
一.日志 DWR依赖 Apache Commons Logging,可以使用log4j实现日志记录功能. 1.1 日志简介 和其他日志框架一样,当设置低等级的日志时所有高于此等级的日志也将会打印出来. ...
- log4j.xml配置详解(转)
转自:http://willow-na.iteye.com/blog/347340 Xml代码 <?xml version="1.0" encoding="UTF- ...
- log4j.xml配置,包含自定义log4j日志级别及输出日志到不同文件
一.配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configura ...
随机推荐
- Python学习笔记5-字符串、bool、数值操作和数组字典排序
1.字符串 # 字符串数字之间转换 # x = int("6") # print type(x) #<type 'str'> # y = str(6) # print ...
- 原生网络请求以及AFN网络请求/异步下载
这里对网络请求方式做一个总结. 原生方式同步GET请求: NSString *urlStr = @"http://apis.juhe.cn/mobile/get?phone=13429667 ...
- 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
题目:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0. 解法一:暴力求解.从1开始查找M,然后判断M*N=X这个数字是否只含有0,1. 解法二:由 ...
- 一个C/C++结构体初始化有趣的现象
我们知道C语言当中结构可以使用{}进行初始化,例如有结构体定义如下: typedef struct type_t { int a; int b; int c; int d; }type_t; 我们可以 ...
- viewport移动端的meta
随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...
- UpdatePanel局部刷新用法
AjaxTest.aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&qu ...
- mysql5.1 有什么新特性
本章介绍 新特性和已过时的特性 新特性: 1.分隔 这个特性允许把一个表里的部分数据放入文件系统中,它会根据表的创建规则来存储,一个表的不同部分被存储在不同的物理地址下.不过这个特性对于用户是不可见的 ...
- codeforces 665D Simple Subset
题目链接 给一个数列, 让你选出其中的m个数, 使得选出的数中任意两个数之和都为质数, m尽可能的大. 首先, 除了1以外的任意两个相同的数相加结果都不是质数. 然后, 不考虑1的话, 选出的数的个数 ...
- Nginx和Nginx+的比较(上)
Nginx和Nginx+的比较(上) 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一.Nginx+介绍 Nginx和 ...
- restful_api
http://www.ruanyifeng.com/blog/2014/05/restful_api.html