log4j日志输出到文件的配置
log4j⽇志输出到⽂件的配置
1.Maven的dependency
2.log4j.properties的配置
3.Junit的Test类
4.web.xml的配置(⾮必要)
5.spring的db.config的配置(⾮必要)
⼀.maven的dependency
org.apache.logging.log4j
log4j-core
2.3
org.slf4j
slf4j-log4j12
1.7.25
junit
junit
4.12
这些jar包都可以去maven中央仓库下载到,http://search.maven.org/。
⼆.log4j.properties的配置。
#所有⽇志
log4j.rootLogger = DEBUG,stdout,file
log4j.logger.org.apache.ibatis=warn
log4j.logger.java.sql=warn
log4j.logger.org.springframework=warn
# Druid
log4j.logger.druid.sql=DEBUG
log4j.logger.druid.sql.DataSource=warn
log4j.logger.druid.sql.Connection=warn
log4j.logger.druid.sql.Statement=DEBUG
log4j.logger.druid.sql.ResultSet=warn
#设置包名的输出级别
log4j.logger.cn.wdq=DEBUG,wdq
#控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
#所有⽂件输出
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = ${webApp.root}/wdq_logs/allDEBUG.log
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.name = fileLogDemo
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
log4j.appender.file.append = true
#wdq下所有包的⽂件输出
log4j.appender.wdq = org.apache.log4j.FileAppender
log4j.appender.wdq.File = ${webApp.root}/wdq_logs/package_wdq.log
log4j.appender.wdq.Encoding=UTF-8
log4j.appender.wdq.name = fileLogDemo
log4j.appender.wdq.Threshold=DEBUG
log4j.appender.wdq.layout=org.apache.log4j.PatternLayout
log4j.appender.wdq.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
log4j.appender.wdq.append = true
log4j.properties是默认加载的⽂件名,如果要另外起名字,还需要在web.xml⾥⾯进⾏配置,如果是测试⽤的,最好⽤默认的名字,这跟Spring的Application.xml有点像。
log4j.rootLogger = DEBUG,stdout,file中的DEBUG是⽇志输出优先级,从⾼到低依次为error,warn,info,debug,低级别的可以输出⾼级别的⽇志,如debug可以输出任
⽇志,但是info只能输出info,warn,error级别的⽇志。stdout,file这两个有点类似于变量名,可以⾃定义名称,可以⽤这两个东西进⾏控制台或者⽂件的输出。⽐如控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender;保存为⽂件的为log4j.appender.file = org.apache.log4j.FileAppender。还有另外三种按天⽣成的,流形式⽣
滚动形式的,这⾥就不介绍了(反正我也忘了...),具体可以去官⽅⽂档看⼀下appender的⼏种输出形式。值得⼀提的是1.⽂件编码(Encoding):这个要定义为UTF-8不
的编码不⼀致,有导致部分乱码。2.⽂件的名字和存储路径(File):如上,我写的是${webApp.root}/wdq_logs/package_wdq.log,这个其实是在web.xml⾥⾯定义好的。
将会输出到你项⽬的磁盘根⽬录。⽂件名的格式有常⽤的.log和.html,推荐⽤.log,⽅便项⽬⾥⾯的所有⼈查看。3.(追加⽅式append):设置属性为true,如果是false的
追加到后⾯。
三.Junit的测试类的输出
package cn.wdq.test;
import org.apache.log4j.Logger;
import org.junit.Test;
public class LoggerTest {
Logger logger= Logger.getLogger(LoggerTest.class);
@Test
public void printLogger(){
logger.error("直接输出吧");
try {
} catch (Exception e) {
e.printStackTrace();
}
}
}控制台输出效果⽂件输出效果
四.web.xml的配置(⾮必要)
webAppRootKey
webApp.root
org.springframework.web.util.Log4jConfigListener
1.使⽤默认的名字(log4j.properties),就不⽤配置log4jConfigLocation(上⾯注释掉的部分)。不然就指定路径(log4j2.xml是我现在⽤不到的部分),我现在放的是在根
classpath是指定路径的格式,此外还有classpath.*:log4j2.xml。他们两个的区别是classpath是默认加载第⼀个,加载到就结束。classpath.*还会搜索后⾯还有没有匹配项
2.如果指定绝对路径就不⽤配置webAppRootKey,这个是把⽂件放到webapp下⾯的。value值可以⾃定义,但是name值只能是webAppRootKey。配置了之后就要配置lis
官⽅的说的默认加载顺序为1.* 2.*(前⾯这两个我忘了...与java相关的就后⾯的两个)3.log4j.properties和3.log4j.xml。现在⽹上有很多⽼旧的⽂章是1.X的版本的xml配置⽅
我这⾥要说的是2.X的。他们两者的区别如下
1.X
log4j日志脱敏处理+javaproperties文件加载
log4j⽇志脱敏处理+javaproperties⽂件加载
Java 加载Properties 配置⽂件:
ResourceBundle bundle = ResourceBundle.getBundle("log4j_filter"); // 不要写扩展名 .properties
LOG_FILTER_SWITH = bundle.getString("log4j.filter.swith");
LOG_FILTER_KEYS = bundle.getString("log4j.filter.keys");
// 直接在本类中使⽤main调⽤时⽤ Properties.class.getResourceAsStream("/log4j_filter.properties");
//Properties p = new Properties();
//p.load(in);
//LOG_FILTER_SWITH = p.getProperty("log4j.filter.swith");
//LOG_FILTER_KEYS = p.getProperty("log4j.filter.keys");
⽇志脱敏实现: 因为只修改了⼀个log4j类的调⽤,故⽇志必须是
private final static Logger logger = LogManager.getLogger(SeqConfControl.class);
1 , 配置⽂件 log4j_filter.properties (⼀个参数是脱敏⽇志开关, ⼀个参数是要脱敏的关键字)
2,⾃定义类 : org.apache.logging.log4j.spi.Log4jFilter.java 是解析处理⽇志字符串中的敏感信息;
log4j原⽣类: org.apache.logging.log4j.spi.AbstractLogger.java 负责调⽤⾃⼰写的类的⽅法.
log4j2配置文件log4j2.xml详解(转载)
log4j2配置⽂件log4j2.xml详解(转载)
此博⽂转载⾃阿豪聊⼲货的“”,博⽂地址:https:///hafiz/p/6170702.html
⼀、背景
昨天了解了⼀下slf4j和log4j2,想要进⾏总结记录,配置步骤⼗分简单,唯⼀需要具体了解的就是log4j2.xml的配置,于是找到了这篇博⽂,配置讲解⼗分详
细,便转载作记录,再次感谢阿豪聊⼲货。以下原⽂:
最近由于项⽬的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之⽽来的slf4j整合log4j的配置()以及log4j2配置⽂件的详解,就需要我们来
好好聊⼀聊了。本⽂就专门来讲解下log4j2.xml配置⽂件的各项标签的意义。
⼆、配置全解
1.关于配置⽂件的名称以及在项⽬中的存放位置
log4j 2.x版本不再⽀持像1.x中的.properties后缀的⽂件配置⽅式,2.x版本配置⽂件后缀名只能为".xml",".json"或者".jsn".
系统选择配置⽂件的优先级(从先到后)如下:
(1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的⽂件.
(2).classpath下的名为log4j2-test.xml的⽂件.
(3).classpath下名为log4j2.json 或者log4j2.jsn的⽂件.
(4).classpath下名为log4j2.xml的⽂件.
我们⼀般默认使⽤log4j2.xml进⾏命名。如果本地要测试,可以把log4j2-test.xml放到classpath,⽽正式环境使⽤log4j2.xml,则在打包部署的时候不
要打包log4j2-test.xml即可。
2.缺省默认配置⽂件
3.配置⽂件节点解析
(1).根节点Configuration有两个属性:status和monitorinterval,有两个⼦节点:Appenders和Loggers(表明可以定义多个Appender和Logger).
log4j输出到文件和数据库
log4j输出到文件和数据库
控制台的实现就不说了,这里提供两种实例的配置,一种是输出为文件的(每天输出一个文件),一种为输出到数据库的配置。
1、输出到文件:
Properties代码
log4j.rootCategory=WARN, CONSOLE, FILE
.surfilter.bt=FATAL,TOFILE
log4j.appender.TOFILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.TOFILE.Threshold=FATAL
log4j.appender.TOFILE.File=E:/javascpace/bt/logs/union.html
log4j.appender.TOFILE.Append=true
log4j.appender.TOFILE.ImmediateFlush=true
log4j.appender.TOFILE.DatePattern='.'yyyy-MM-dd'.html'
yout=com.surfilter.bt.util.FormatHTMLLayout
log4j.rootCategory=WARN, CONSOLE, FILE
.surfilter.bt=FATAL,TOFILE
log4j.appender.TOFILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.TOFILE.Threshold=FATAL
log4j.appender.TOFILE.File=E:/javascpace/bt/logs/union.html
log4j.appender.TOFILE.Append=true
log4j.appender.TOFILE.ImmediateFlush=true
log4j输出格式配置说明
%c 列出logger名字空间的全称,如果加上{}表示列出从最内层算起的指定层数的名字空间 log4j配置文件参数举例 输出显示媒介
假设当前logger名字空间是"a.b.c"
%c a.b.c
%c{2} b.c
%20c (若名字空间长度小于20,则左边用空格填充)
%-20c (若名字空间长度小于20,则右边用空格填充)
%.30c (若名字空间长度超过30,截去多余字符)
%20.30c (若名字空间长度小于20,则左边用空格填充;若名字空间长度超过30,截去多余字符)
%-20.30c (若名字空间长度小于20,则右边用空格填充;若名字空间长度超过30,截去多余字符)
%C 列出调用logger的类的全名(包含包路径) 假设当前类是"org.apache.xyz.SomeClass"
%C org.apache.xyz.SomeClass
%C{1} SomeClass
%d 显示日志记录时间,{}使用ISO8601定义的日期格式 %d{yyyy/MM/dd
HH:mm:ss,SSS} 2005/10/12 22:23:30,117
%d{ABSOLUTE} 22:23:30,117
%d{DATE} 12 Oct 2005 22:23:30,117
%d{ISO8601} 2005-10-12 22:23:30,117
%F 显示调用logger的源文件名 %F MyClass.java
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 %l MyClass.main(MyClass.java:129) %L 显示调用logger的代码行 %L 129
%m 显示输出消息 %m This is a message for debug.
%M 显示调用logger的方法名 %M main
%n 当前平台下的换行符 %n Windows平台下表示rn
UNIX平台下表示n
log4j输出多个日志文件
log4j输出多个自定义日志文件
log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的log4j基础上稍加配置即可轻松实现这一功能。
先看一个常见的log4j.properties文件,它是在控制台和myweb.log文件中记录日志:
log4j.rootLogger=DEBUG, stdout, logfile
.springframework=ERROR
.apache=INFO
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${myweb.root}/WEB-INF/log/myweb.log
log4j.appender.logfile.MaxFileSize=512KB
log4j.appender.logfile.MaxBackupIndex=5
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%d %p [%c] - %m%n
如果想对不同的类输出不同的文件(以.Test为例),先要在Test.java中定义:
private static Log logger = LogFactory.getLog(Test.class);
然后在log4j.properties中加入:
.Test= DEBUG, test
log4j2.xml 标准配置写法
一、概述
log4j2是Apache Software Foundation的一个开源日志框架,广泛应用于Java应用程序的日志记录和管理。在使用log4j2时,通常需要编写log4j2.xml文件进行配置。本文将介绍log4j2.xml标准配置的写法,帮助读者更加有效地使用log4j2进行日志记录和管理。
二、log4j2.xml文件概述
1. log4j2.xml是log4j2的配置文件,用于定义日志记录器、日志级别、输出目的地等配置信息。
2. log4j2.xml采用XML格式进行配置,通过定义各种元素和属性来实现对log4j2框架的配置和定制。
三、log4j2.xml标准配置写法
在编写log4j2.xml文件时,可以按照以下标准配置进行操作:
1. 配置根节点
```xml
```
其中,根节点包含了两个属性:status和monitorInterval。status属性用于设置全局日志级别,monitorInterval属性用于指定log4j2监视配置文件变化的时间间隔。
2. 配置日志级别
```xml
```
在节点下,可以通过节点配置全局日志级别,并通过节点引用Appenders进行输出。
3. 配置Appenders
```xml
```
在节点下,可以配置各种Appenders,例如Console和File。通过name属性指定Appender的名称,通过target或fileName等属性指定输出目的地,并通过节点定义日志输出格式。
4. 完整的配置示例
综合以上各项配置,下面给出一个完整的log4j2.xml标准配置示例:
```xml
springboot+log4j2打印sql日志到日志文件
springboot+log4j2打印sql⽇志到⽇志⽂件
框架:springboot + log4j2 ⽇志框架;
在yml⽂件指定mapper接⼝包名:
不⽤在yml ⽂件下添加:mybatis.configuration = org.apache.ibatis.logging.stdout.StdOutImpl
该标签亲测作⽤只是在控制台输⼊sql⽇志,如果想将sql打印到⽇志⽂件中,有了它的存在,只能在控制台打印sql,⽇志⽂件是不会打印的;如图所⽰:
log4j2.xml ⽂件 appenders 标签下为
添加到 loggers 下:
完整的 log4j2.xml 内容如下:
d:gxs-log
${app_name}
filePattern="${log_path}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
filePattern="${log_path}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
filePattern="${log_path}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
filePattern="${log_path}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
View Code
log4j日志不输出的问题
log4j⽇志不输出的问题
今天服务器上报错,想先去看⼀下⽇志进⾏排查,结果发现⽇志很久都没有输出过了。从上午排查到下午,刚刚解决,因此记录⼀下,但现
在也只是知其然,并不知其所以然,所以如果⼤家有什么想法请在下⽅评论。
先说⼀下环境,服务器是linux,项⽬是运⾏在tomcat下的Spring项⽬,⽇志⽤的是log4j。
⾸先,从10⽉13号开始便没有新的⽇志⽂件了。假设⽇志名为log.txt(如果你设置了DailyRollingFileAppender,那么你当天的⽇志⽂件就
是log.txt),先备份该⽂件到其他⽬录下,然后删除该⽂件,重新启动tomcat。这是为了确认你的log4j配置是否有问题,因为这是最容易出
错的地⽅。很遗憾,我不是这⾥出的问题,因为项⽬重启后,⽇志⽂件⼜重新⽣成了,但很奇怪的是,⽇志⽂件是空的,其⼤⼩为0.
感觉⾃⼰碰上了很神奇的问题,因此我在⾃⼰的本地进⾏调试,启动项⽬后发现,正常的项⽬启动⽇志是有的:
15:13:48:0253 INFO [RMI TCP Connection(3)-127.0.0.1] -Root WebApplicationContext: initialization completed in 18479 ms
但我⾃⼰的⼀些⽇志输出是不显⽰的,⽐如:
private static final Logger log = LoggerFactory.getLogger(MyDomain.class);
("show info log");
show info log这句话就不打印,现在证明,我的⽇志配置没有问题,服务器也找到了我的⽇志⽂件,但应该是我⾃⼰的Logger是不对应正确的
⽇志输出的,因为我的console(控制台)有显⽰。
接下来,我就是开始看源码了。先是LoggerFactory.getLogger(Class clazz)⽅法:
public static Logger getLogger(Class clazz) {
【原】配置Log4j,使得MyBatis打印出SQL语句
【原】配置Log4j,使得MyBatis打印出SQL语句
【环境参数】
JDK:jdk1.8.0_25
IDE:Eclipse Luna Servie Release 1
框架:Spring 4.1.5 + SpringMVC 4.1.5 + MyBatis 3.2.2
【配置步骤】
⼀、设置MyBatis的Setting(⾮必须,不同环境下,可能不需要该设置)。
在“src/main/java/resources”⽬录下,创建mybatis-config.xml⽂件,并且输⼊下列内容。
1
2
3 PUBLIC "-////DTD Config 3.0//EN"
4 "/dtd/mybatis-3-config.dtd">
5
6
7
8
9
10
⼆、配置log4j的配置⽂件。
不同的项⽬中,log4j的配置⽂件的格式可能不同,在⼀些项⽬中,log4j的配置⽂件是XML格式的,⽐如log4j.xml;在另⼀些项⽬中,log4j
的配置⽂件是properties格式的,⽐如log4j.properties。
备注:properties格式⽂件的配置⼀般只在⽼的项⽬中存在,新的互联⽹类项⽬,⼀般都是XML格式。
1、对于properties格式⽂件的配置。
1 ###############Log4j 4 SQL Output start#################
2 .xxx.mydao=DEBUG
3 .springframework=DEBUG
4 .ibatis=DEBUG
5 mon.jdbc.SimpleDataSource=DEBUG
6 mon.jdbc.ScriptRunner=DEBUG
log4配置详解
实例
#定义log输出级别
log4j.rootLogger=debug,CONSOLE
#log4j.rootLogger=INFO,DEFAULT
#定义日志输出目的地:控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#日志输出格式,下面一行是指定具体的格式
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%d{yyyy-MM-dd
HH:mm:ss,SSS} [%c]-[%p] %m%n
#按一定的频度滚动日志记录文件
log4j.appender.DEFAULT=org.apache.log4j.DailyRollingFileAppender
#DatePattern,精确到dd为每天
log4j.appender.DEFAULT.DatePattern='.'yyyy-MM-dd
#append的值为true为增加,false则为覆盖
log4j.appender.DEFAULT.Append=true
#file 指定日志输出目录
log4j.appender.DEFAULT.File=D:/logs/default.log
#日志输出格式
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%d{yyyy-MM-dd
HH:mm:ss,SSS} [%c]-[%p] %m%n
% 含义:
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM
dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
