在Spring的项目中配置Log4j存放日志文件到指定目录下
在Spring中使用LOG4J为日志输出的插件已有一段日子了,但有时候发现日志文件虽然是已经在根据自己的理想存放了,但还会有些莫名其妙的项目日志文件出现tomcat内(因为项目的日志文件都以项目命名嘛,所以比较容易区分这些log)。
这些令我纠结的日志文件,让我在改善一下LOG4J的配置。
才发现,之前用的配置方式真是弱爆了。
1.先说自己比较理想的存放日志路径。
我比较喜欢把日志文件放在项目的WEB-INF下,然后当然有个文件夹叫logs。
logs相信很多人都会存在在这样的目录下,但放在WEB-INF目录下相信还是有些人不理解。
其实当然是为了资源保护了。
2.旧的方式
编写Servlet在项目部署的时候重置log4j配置文件中的日志文件存放路径。
web.xml配置如下:
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.foo.log.Log4jInit</servlet-class>
<init-param>
<param-name>log4j_properties_patch</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Log4Init的代码就不贴了,网上也比较多。
主要作用就是修改原有的log4j.appender的File 配置修改为现在项目部署的绝对路径,方法多样,功能都一样!
问题产生了:
这种方式在Spring环境中还是会生成一些多余日志文件。
因为在项目部署时,spring初始化比配置的Servlet启动的还早,所以原有的默认日志存放路径就先生效了(虽然没什么内容,也不对项目有什么影响)。
3.有没有更好的配置方式呢?
使用Spring提供的日志配置方法
web.xml添加如下代码:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>project</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value> </context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
webAppRootKey: 配置项目的别名,上面配置别名为priject。
若你部署的项目不在tomcat 中的话这个可以忽略,因为tomcat没为每个应用配置不同的webappRoot属性,所以如果出现两个或以上的话就会报错了。
然后修改log4j.properties的配置,把日志文件输出的路径配置修改为:
log4j.appender.A1.File=${project}WEB-INF/logs/Project.log
A1是我的appender命名。
${project}是使用上述web.xml中的应用别名从而获取应用的绝对路径。
注:若不需要配置应用别名的话,即没配置webAppRootKey。
可以直接这么写:
log4j.appender.A1.File=${webapp.root}WEB-INF/logs/Project.log
webapp.root为默认属性。
若有配置webAppRootKey的话就被覆盖。
题外:
1.还有一种方式是使用环境变量,例如${catalina.home}。
不过这样同样也会产生多余的log 的,道理跟用Servlet一样。
当然,如果你不像我这么纠结这些多余的log的话。
活得也比较轻松。
2.而在不同的操作系统中的路径分割符是不同的,linux是"/" ,而windows是"\",但目前的写法在两个环境中同样用tomcat测试是没问题的。
虽然在windows的时候,初始化的日志看到的路径有点别扭。
不过仿佛记得在一些应用服务器中会产生不兼容....
3.推荐默认情况下配置文件log4j.appender.A1.File=poject.log,而项目发布前,用ANT等
脚本把路径修改为log4j.appender.A1.File=${project}WEB-INF/logs/Project.log 这样做的好处是,在用junit测试时,生成的日志文件就在项目的根路径中,容易处理或忽略。
log4j的使用方法
log4j的使用方法log4j的使用方法什么是log4jlog4j是一个使用Java编写的开源日志记录工具。
它允许开发人员在程序中进行灵活的日志记录,帮助定位和修复应用程序的错误和问题。
log4j通过配置文件确定日志记录的级别和输出方式,提供了丰富的功能和灵活性。
log4j的基本配置1.导入log4j的依赖库:添加以下依赖到你的项目中的``文件中:<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version></version></dependency>2.创建log4j的配置文件:在项目的资源目录下创建一个名为``的文件,并添加以下内容:# 设置日志输出到控制台=INFO, stdout# stdout将日志输出到控制台====%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n以上配置将日志记录级别设为INFO,并将日志输出到控制台。
3.初始化log4j:在你的应用程序入口处(比如main方法),添加以下代码进行log4j的初始化:import ;public class MyApp {public static void main(String[] args) {// 加载log4j的配置文件("");// 其他应用程序代码...}}log4j的日志级别与日志输出log4j提供了不同的日志级别,根据不同的需求可以进行设置。
1.日志级别:–TRACE:最详细的日志级别,常用于调试信息。
–DEBUG:用于调试和开发阶段的详细信息。
–INFO:提供程序的运行状态信息以及其他关键事件。
–WARN:表明潜在的问题,但程序仍能正常运行。
–ERROR:用于记录错误事件,但仍可继续执行。
–FATAL:严重错误,可能导致程序终止执行。
Tomcat+Spring应用系统中log4j配置文件的使用方法和存放位置
Tomcat+Spring应用系统中log4j配置文件的使用方法和存放位置Tomcat+Spring应用系统中log4j配置文件的使用方法和存放位置使用Spring Framework已经快两年了,是从Spring发行包携带的样例程序开始的,从来没有仔细研究过各部分的使用方法。
最近才发现使用log4j的方法是不正确的。
log4j配置文件的存放位置跟其他程序环境不同,在Spring Framework应用系统中,log4j 配置文件的存放位置是自由的。
在应用程序的web.xml中进行规定,[1]使用以下代码:<context-param><param-name>log4jConfigLocation</param-name><param-value>/WEB-INF/classes/log4j.properties</param-value></context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>60000</param-value></context-param>同时还要设置一个listener<listener><listener-class>org.springframework.web.util.Log4jConfigListener</listen er-class></listener>告警的排除设置好web.xml后,部署WAR文件,发现以下告警:log4j:WARN No such property [maxFileSize] in org.apache.log4j.DailyRollingFileAppender.log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender.后来发现一个介绍更为详细的文章[3]学到以下知识:•Log4jConfigListener是spring提供的工具类,它开启一个log4j的监视线程,并每60 (log4jRefreshInterval变量定义)秒检测日志配置变化,从而不需要每次重新启动web服务来应用新的配置。
LOG4J配置详解及不同的包PACKAGE下的日志写入到不同的日志文件下
LOG4J配置详解及不同的包(PACKAGE)下的日志写入到不同的日志文件下Log4j配置详解及不同的包(package)下的日志写入到不同的日志文件下2012-03-28 17:33 1027人阅读评论(0) 收藏举报log4jfilecservletsjavamailemail所需要的包:commons-logging-1.1.x.jar,log4j-1.2.x.jar(主要)两个jar包(放入项目bin目录下)及log4j.properties 文件(放入到项目src根目录下)以下都是log4j.properties要写入的内容:一:参数介绍:1、Log4J配置文件的基本格式如下:[plain] view plaincopyprint?1. #配置根Logger2. log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …3.4. #配置日志信息输出目的地Appender5. log4j.appender.appenderName = .of.appender.class6. log4j.appender.appenderName.option1 = value17. …8. log4j.appender.appenderName.optionN = valueN9.10. #配置日志信息的格式(布局)11. yout = yout.class12. yout.option1 = value113. …14. yout.optionN = valueN2、其中 [level] 是日志输出级别,共有5级:[plain] view plaincopyprint?1. FATAL 02. ERROR 33. WARN 44. INFO 65. DEBUG 73、Appender 为日志输出目的地,Log4j提供的appender有以下几种:[plain] view plaincopyprint?1. org.apache.log4j.ConsoleAppender(控制台),2. org.apache.log4j.FileAppender(文件),3. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),4. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),5. org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)4、Layout:日志输出格式,Log4j提供的layout有以下几种:[plain] view plaincopyprint?1. org.apache.log4j.HTMLLayout(以HTML表格形式布局),2. org.apache.log4j.PatternLayout(可以灵活地指定布局模式),3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),4. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)5、打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:[plain] view plaincopyprint?1. %m 输出代码中指定的消息2. %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL3. %r 输出自应用启动到输出该log信息耗费的毫秒数4. %c 输出所属的类目,通常就是所在类的全名5. %t 输出产生该日志事件的线程名6. %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”7. %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 9218. %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
springlog4j2.xml配置文件详解
springlog4j2.xml配置⽂件详解⼀、log4j2介绍 log4j 2.x版本不再⽀持像1.x中的.properties后缀的⽂件配置⽅式,2.x版本配置⽂件后缀名只能为".xml",".json"或者".jsn"。
配置⽂件的格式:log2j配置⽂件可以是xml格式的,也可以是json格式的。
配置⽂件的位置:log4j2默认会在classpath⽬录下寻找log4j2.xml、log4j.json、log4j.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进⾏命名。
⼆、配置⽂件节点解析 (1).根节点Configuration有两个属性:status和monitorinterval,有两个⼦节点:Appenders和Loggers(表明可以定义多个Appender和Logger)。
status⽤来指定log4j本⾝的打印⽇志的级别。
monitorinterval⽤于指定log4j⾃动重新配置的监测间隔时间,单位是s,最⼩是5s。
(2).Appenders节点,常见的有三种⼦节点:Console、RollingFile、File。
Console节点⽤来定义输出到控制台的Appender。
name:指定Appender的名字. target:SYSTEM_OUT 或 SYSTEM_ERR,⼀般只设置默认:SYSTEM_OUT。
PatternLayout:输出格式,不设置默认为:%m%n。
在SpringBoot中如何使用log4j记录日志
在SpringBoot中如何使⽤log4j记录⽇志前⾔Spring Boot在所有内部⽇志中使⽤Commons Logging,但是默认配置也提供了对常⽤⽇志的⽀持,如:Java Util Logging,Log4J, Log4J2和Logback。
每种Logger都可以通过配置使⽤控制台或者⽂件输出⽇志内容。
本⽂主要介绍了在Spring Boot中如何使⽤log4j记录⽇志,感兴趣的来⼀起学习学习。
引⼊log4j依赖在创建Spring Boot⼯程时,我们引⼊了spring-boot-starter,其中包含了spring-boot-starter-logging,该依赖内容就是Spring Boot默认的⽇志框架Logback,所以我们在引⼊log4j之前,需要先排除该包的依赖,再引⼊log4j的依赖,就像下⾯这样:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j</artifactId></dependency>配置log4j.properties在引⼊了log4j依赖之后,只需要在src/main/resources⽬录下加⼊log4j.properties配置⽂件,就可以开始对应⽤的⽇志进⾏配置使⽤。
springboot配置log4j2日志,并输出到文件
springboot配置log4j2⽇志,并输出到⽂件1、pom.xml中,如果导⼊了spring-boot-starter-web依赖包,那么必须先将⾃带的⽇志框架去掉,如下<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除springboot⾃带的logback框架 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>然后加⼊<!-- 引⼊springboot log4j2依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>2、在resources下建⼀个log4j2spring.xml<?xml version="1.0" encoding="UTF-8"?><!--Configuration后⾯的status,这个⽤于设置log4j2⾃⾝内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--><!--monitorInterval:Log4j能够⾃动检测修改配置⽂件和重新配置本⾝,设置间隔秒数--><configuration monitorInterval="5"><!--⽇志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!--变量配置--><Properties><!-- 格式化输出:%date表⽰⽇期,%thread表⽰线程名,%-5level:级别从左显⽰5个字符宽度 %msg:⽇志消息,%n是换⾏符--><!-- %logger{36} 表⽰ Logger 名字最长36个字符 --><property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /><!-- 定义⽇志存储的路径,不要配置相对路径 --><property name="FILE_PATH" value="/logs" /><!--项⽬名称--><property name="FILE_NAME" value="demo" /></Properties><appenders><console name="Console" target="SYSTEM_OUT"><!--输出⽇志的格式--><PatternLayout pattern="${LOG_PATTERN}"/><!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></console><!--⽂件会打印出所有信息,这个log每次运⾏程序会⾃动清空,由append属性决定,适合临时测试⽤--><File name="Filelog" fileName="${FILE_PATH}/test.log" append="false"><PatternLayout pattern="${LOG_PATTERN}"/></File><!-- 这个会打印出所有的info及以下级别的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档--><RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/${FILE_NAME}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性⽤来指定多久滚动⼀次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同⼀⽂件夹下7个⽂件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!-- 这个会打印出所有的warn及以下级别的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档--><RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/${FILE_NAME}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性⽤来指定多久滚动⼀次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同⼀⽂件夹下7个⽂件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!-- 这个会打印出所有的error及以下级别的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档--><RollingFile name="RollingFileError" fileName="${FILE_PATH}/${FILE_NAME}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性⽤来指定多久滚动⼀次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="10MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同⼀⽂件夹下7个⽂件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile></appenders><!--Logger节点⽤来单独指定⽇志的形式,⽐如要为指定包下的class指定不同的⽇志级别等。
详解Log4j日志文件存放位置设置
详解Log4j⽇志⽂件存放位置设置以DailyRollingFileAppender 为例:假设每天⼀个⽇志⽂件有以下设置:log4j.appender.A1=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A1.File=app.loglog4j.appender.A1.DatePattern='.'yyyy-MM-ddyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %5p - %c -%-4r [%t] - %m%n经过⾃⼰测试,⽆法找到app.log⽂件如要将⽇志⽂件保存在:根⽬录/web-info/logs/下,个⼈有以下4种解决⽅案:1 绝对路径log4j.appender.A1.File=D:\apache-tomcat-6.0.18/webapps/项⽬/WEB-INF/logs/app.log但这种写法灵活性很差以下3中使⽤相同的设置原理: jvm的环境变量2:spring的Log4jConfigListener通过以下配置<context-param><param-name>webAppRootKey</param-name><param-value>webApp.root</param-value></context-param><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>log4j.appender.logfile.File=${webApp.root}/WEB-INF/logs/app.log备注:1、spring配置变了webAppRootKey是不能变的,值可以随意写。
springmvc+log4j操作日志记录,详细配置
springmvc+log4j操作⽇志记录,详细配置没有接触过的,先了解⼀下:部分内容来:感谢!需要导⼊包:log包:log4j-12.17.jar第⼀步:web.xml配置<!-- log4j配置,⽂件路径,因为是跟随项⽬启动 --><context-param><param-name>log4jConfigLocation</param-name><param-value>/WEB-INF/log4j.xml</param-value></context-param><!-- 配置log4j.xml变量,如果需要动态的就使⽤下⾯⽅式,使⽤⽅法${name} --><context-param><param-name>controller</param-name><param-value>controller-log</param-value></context-param><context-param><param-name>loggingLevel</param-name><param-value>info</param-value></context-param><!-- 加载log4j配置⽂件 --><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>第⼆步log4j.xml配置(配置⽂件可以有两种⽅式,⼀种是xml,⼀种是properties。
配置log4j
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>5000</param-value>
</context-param>
spring监听:
<listener>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<!-- ContextConfigLocation -->
<context-param>
<param-name>contextConfigLocation</param-name>
log4j.appender.A1.MaxBackupIndex=10
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c{1}]-[%p]:%L - %m%n
SpringBoot使用logback、logstash、ELK记录日志文件的方法
SpringBoot使⽤logback、logstash、ELK记录⽇志⽂件的⽅法Spring Boot 下,尝试使⽤ log4j 记录⽇志到 logstash,在src/main/resources ⽬录下添加 log4j.properties ⽂件进⾏⾃定义输出⽇志⽂件,未能成功。
在 application.yml 中配置 logging path 打印⽇志成功了,但是未能调试成功⽇志分⽂件记录。
⽹上查阅资料,说是 Spring Boot 默认使⽤ logback 记录⽇志。
log4j 多次尝试后⽆果,遂改为使⽤ logback 记录,最终测试成功。
1. 关于 Spring Boot ⽇志⽂件路径的疑惑?同时配置了 logging.path 和 logging.file 属性,如下配置:logging:path: /var/logfile: test.log仅仅只会在项⽬根路径下产⽣ test.log ⽂件,不会在指定路径下产⽣⽇志⽂件(期望⽇志路径为:logging.path + logging.file)。
原因:Spring Boot 中的 logging.path 和 logging.file 这2个属性,只需要配置其中之⼀即可,如果同时配置,则使⽤logging.file 属性。
当配置了 loggin.path 属性时,将在该路径下⽣成 spring.log ⽂件,即:此时使⽤默认的⽇志⽂件名 spring.log。
当配置了 loggin.file 属性时,将在指定路径下⽣成指定名称的⽇志⽂件。
默认为项⽬相对路径,可以为 logging.file 指定绝对路径。
logging:path: /var/logs # 在/var/logs⽬录下⽣成spring.log⽂件file: /var/logs/test.log # 在/var/logs⽬录下⽣成test.log⽂件2. logback 取代 log4j的理由:以下来在⽹络摘抄:Logback 和 log4j 是⾮常相似的,如果你对 log4j 很熟悉,那对 logback 很快就会得⼼应⼿。
