log4j日志文件路径的配置

合集下载

Logback入门和配置说明

Logback入门和配置说明

Logback⼊门和配置说明Logback 是 Log4j 的改进版本,⽽且原⽣⽀持 SLF4J,Logback 的初始化步骤如下:1. 在类路径中查找 logback-test.xml 配置⽂件2. 在类路径中查找 logback.groovy 配置⽂件3. 在类路径中查找 logback.xml 配置⽂件4. 如果都没有找到,那边就是⽤默认配置,将⽇志输出到控制台maven 依赖在使⽤ logback 之前,需要增加相关依赖,slf4j-api 是 slf4j 的核⼼,定义了简单统⼀的接⼝,logback-classic 则是具体的⽇志实现。

<dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency></dependencies>⽇志⽰例⾃动⽇志配置配置最简单的⽅法就是使⽤ logback 的默认配置,默认配置是将⽇志输出到控制台,代码如下:package org.lixue.slf4j;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class HelloWorld{final static Logger logger=LoggerFactory.getLogger(HelloWorld.class);public static void main(String[]args){("HelloWorld");}}使⽤ logback-test.xml 或 logback.xml ⾃动配置在类路径中,创建 logback-test.xml 或 logback.xml 配置⽂件,并增加配置如下,该配置等价与⾃动配置:<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!--encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoderbydefault--><encoder><pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT"/></root></configuration>配置⽂件说明logback 配置⽂件的语法⾮常灵活。

log4j2动态修改日志级别及拓展性使用

log4j2动态修改日志级别及拓展性使用

log4j2动态修改⽇志级别及拓展性使⽤⼀、供参考的完整⽇志配置<?xml version="1.0" encoding="UTF-8"?><!-- 配置LoggerConfig,即Appenders的⽇志级别为WARN --><Configuration status="WARN"><!-- 定义下⾯的引⽤名 --><Properties><property name="basePath">${sys:vmparam}</property><property name="filePath">${basePath}/app.log</property></Properties><!-- Appenders⽀持配置多个Appender,⽀持向不同的⽬标输送⽇志,本例为配置向控制台输出 --><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console><!-- 将⽇志输出到指定位置的⽂件中 --><RollingFile name="RollingFile" fileName="${filePath}"filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz"><Policies><!-- interval单位为filePattern最后⼀个单位,此处为6⼩时,modulate若为true,则⽇志时间将以0点为边界进⾏偏移计算,由于加了.gz策略,所以此处意思为每隔6⼩时,便会新⽣成⼀个log4j2的压缩⽂件,当每个⽂件超过250M时,也会新⽣成⼀个log4j2的压缩⽂件 --><TimeBasedTriggeringPolicy interval="6" modulate="true"/><SizeBasedTriggeringPolicy size="250 MB"/></Policies><!-- 滚动策略,⽇志⽂件最多保留20个 --><DefaultRolloverStrategy max="20"/><!-- 最多备份30天以内||⽇志⽂件⼤⼩达到100GB的⽇志||⽂件数量超过⼗个此处为策略限制,Delete中可以按⾃⼰需要⽤正则表达式编写 --><DefaultRolloverStrategy><Delete basePath="${filePath}" maxDepth="1"><IfFileName glob="logs_*.log"/><IfLastModified age="30d"/><IfAccumulatedFileSize exceeds="100 GB"/><IfAccumulatedFileCount exceeds="10"/></Delete></DefaultRolloverStrategy></RollingFile></Appenders><!-- Loggers⽀持配置多个Logger,可引⽤不同的⽬标Appender,也可根据业务需求定制特定要求的Appender --><Loggers><AsyncLogger name="AsyncLogger" level="trace"><appender-ref ref="Console"/><appender-ref ref="RollingFile"/></AsyncLogger><asyncRoot level="trace"><appender-ref ref="Console"/></asyncRoot><Root level="info"><!-- <AppenderRef ref="Console" /> --><AppenderRef ref="RollingFile"/></Root><!-- 第三⽅⽇志系统 --><logger name="org.springframework" level="INFO" additivity="false"><appender-ref ref="Console"/></logger><logger name="ty" level="warn"/><logger name="org.apache.http" level="warn"/><logger name="org.mongodb.driver" level="INFO"/><logger name="ty" level="warn"/><logger name="org.springframework.data.redis" level="INFO"/></Loggers></Configuration>⼆、动态修改⽇志级别Collection<org.apache.logging.log4j.core.Logger> current = LoggerContext.getContext(false).getLoggers();Collection<org.apache.logging.log4j.core.Logger> notcurrent = LoggerContext.getContext().getLoggers();Collection<org.apache.logging.log4j.core.Logger> allConfig = current;allConfig.addAll(notcurrent);for (org.apache.logging.log4j.core.Logger log:allConfig){log.setLevel(Level.DEBUG);} 三、⾃定义appender 以上介绍,均依赖于log4j2提供的官⽅配置,当对⽇志的业务逻辑复杂时,光靠配置也许满⾜不了需要,此时我们会想⾃⼰能操控打印的⽇志,做⽇志的路由,或保存等操作,这个时候就需要有⾃定义的appender,可以配置的就靠配置完成,不能的就⾃⼰写代码⼲预,⽽log4j2刚好提供了这样的拓展性。

android log4j 用法

android log4j 用法

android log4j 用法Android Log4j 用法:详细步骤解析Log4j是一个功能强大且广泛用于Java程序的日志记录工具。

它提供了灵活的日志配置选项,允许开发人员根据应用程序的需求自定义日志输出。

在Android开发中,我们可以使用Log4j来记录应用程序的日志,以便更好地进行调试和故障排除。

本文将一步一步介绍如何在Android项目中使用Log4j,并对其用法进行详细解析。

第一步:引入Log4j库要使用Log4j,我们首先需要将其库文件添加到Android项目的依赖项中。

可以从Apache官方网站上下载Log4j的最新版本。

下载完成后,将其包含在项目的libs文件夹中。

接下来,在项目的build.gradle文件中添加以下依赖项:dependencies {implementation files('libs/log4j.jar')}这样,Log4j库就会被添加到项目中。

第二步:创建配置文件Log4j需要一个配置文件来定义日志输出的格式和目标。

我们可以在项目的res目录下创建一个名为log4j.properties的文件,并按照如下内容进行配置:# 设置根日志级别为DEBUGlog4j.rootLogger=DEBUG,stdout# 配置控制台输出log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %t %c - %m%n# 配置文件输出log4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=/sdcard/app.loglog4j.appender.file.MaxFileSize=5MBlog4j.appender.file.MaxBackupIndex=4yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %t %c - %m%n在上述配置文件中,我们首先设置了根日志级别为DEBUG,这意味着只有DEBUG级别及以上的日志才会被输出。

log4j基本使用方法

log4j基本使用方法

log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。

首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址:/log4j/1.2/download.html我们先看一个最简单的示例:【示例1】项目结构:【注:由于这里的多个项目公用一个jar档,我们可以创建一个专门放置jar档的Java工程,然后将jar档放到lib目录下。

在要使用的工程中按图所示进行引用】Java代码:Java代码1package com.coderdream.log4j;23import org.apache.log4j.Logger;45public class HelloLog4j {67private static Logger logger = Logger.getLogger(HelloLog4j.class);89/**10* @param args11*/12public static void main(String[] args) {13// System.out.println("This is println message.");1415// 记录debug级别的信息16logger.debug("This is debug message.");17// 记录info级别的信息("This is info message.");19// 记录error级别的信息20logger.error("This is error message.");21}22}配置文件log4j.properties:Properties代码23#可以设置级别:debug>info>error24#debug:显示debug、info、error25#info:显示info、error26#error:只error27log4j.rootLogger=debug,appender128#log4j.rootLogger=info,appender129#log4j.rootLogger=error,appender13031#输出到控制台32log4j.appender.appender1=org.apache.log4j.ConsoleAppender33#样式为TTCCLayoutyout=org.apache.log4j.TTCCLayout输出结果:Console代码35[main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.36[main] INFO com.coderdream.log4j.HelloLog4j - This is info message.37[main] ERROR com.coderdream.log4j.HelloLog4j - This is error message. 通过配置文件可知,我们需要配置3个方面的内容:1、根目录(级别和目的地);2、目的地(控制台、文件等等);3、输出样式。

JAVA中使用log4j及slf4j进行日志输出的方法详解

JAVA中使用log4j及slf4j进行日志输出的方法详解

JAVA中使⽤log4j及slf4j进⾏⽇志输出的⽅法详解 JAVA中输出⽇志⽐较常⽤的是log4j,这⾥讲下log4j的配置和使⽤⽅法,以及slf4j的使⽤⽅法。

⼀、下载log4j的架包,并导⼊项⽬中,如下:⼆、创建log4j.properties配置⽂件1、log4j配置⽂件的位置:(1)如果是java project项⽬,则在项⽬的根⽬录下创建log4j.properties⽽不是在src⽬录下。

(2)如果是java web项⽬,则在src⽬录下创建log4j.properties配置⽂件,因为这个时候tomcat会去默认的加载这个配置⽂件,⽽不需要我们⼿动的加载log4j的配置⽂件。

log4j.properties配置内容如下:1 log4j.rootLogger=info,logTest2 log4j.appender.logTest=org.apache.log4j.DailyRollingFileAppender3 log4j.appender.logTest.File=/logs/LogTest/logTest.log4 log4j.appender.logTest.DatePattern='.'yyyy-MM-dd'.log'5 yout=org.apache.log4j.PatternLayout6 yout.ConversionPattern=[LogTestInfo] [%d][%c][%-5p]%m%n2、log4j配置项的说明:(1)第⼀⾏中rootLogger配置的是整个项⽬的⽇志输出,也可以只针对某⼀个模块进⾏⽇志输出,⽐如第⼀⾏配置成.logTest.project=info,logTest,则⽇志只输出项⽬路径com/logTest/project下的。

info为⽇志级别,可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。

log4j

log4j
设置日志消息的初始级别 设置日志信息是否立即输出, 默认为true 设置操作类型 System.out 默认值 System.err
FileAppender Threshold ImmediateFlush File
设置日志消息的初始级别 设置日志信息是否立即输出,默认为true 设置输出的文本 默认值是true,新增文件内容是否覆盖原 有内容,false为覆盖
org.apache.log4j.PatternLayout 可以灵活地指定布局模式 ConversionPattern=%m%n :指定怎样格式化指定的消息.
占位符参考log4j API
org.apache.log4j.SimpleLayout
包含日志信息的级别和信息字符串,内 置的简单布局没有提供自定义设置 包含日志产生的时间,线程,类别等等 信息
Append
DailyRollingFileAppender DatePattern的格式符 的格式符 Threshold '.'yyyy-MM
设置日志消息的初始级别 每月
#在配置文件中设置: '.'yyyy-ww 每周 ImmediateFlush 设置日志信息是否立即输出,默认为true #设置为每月输出 log4j.appender.MyAppenderName.DatePattern = '.'yy-MM '.'yyyy-MM-dd 每天 //在程序中使用 设置输出的文本 File //设置为每月输出 '.'yyyy-MM-dd-a 每天两次 myFile. setDatePattern ("'.true,新增文件内容是否覆盖原 '.'yyyy-MM-dd-HH 每小时 有内容,false为覆盖

springlog4j2.xml配置文件详解

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。

log4j2 原理

log4j2 原理

log4j2 原理Log4j2是Apache Log4j的升级版本,是一个可扩展的日志框架。

它提供了一套灵活的配置选项,可以满足各种日志需求,同时具有较高的性能。

Log4j2的原理可以总结为以下几个步骤:1. 配置加载:Log4j2通过解析配置文件(通常为XML或JSON格式)来获取日志系统的配置信息。

配置文件指定了日志的输出格式、输出位置、日志级别等细节。

Log4j2支持多种配置方式,包括配置文件、配置类和编程配置。

2. 日志记录:应用程序通过调用Log4j2提供的API来记录日志。

日志级别可以根据重要性从低到高分为TRACE、DEBUG、INFO、WARN、ERROR和FATAL。

Log4j2会根据日志级别过滤日志消息,只记录达到或超过指定级别的消息。

3. 日志输出:Log4j2根据配置文件中指定的输出位置,将日志消息输出到指定的目标,如控制台、文件、数据库或远程服务器。

Log4j2支持多种输出方式,包括ConsoleAppender、FileAppender、SocketAppender等。

4. 日志异步处理:为了提高性能,Log4j2采用异步处理机制。

它使用了多线程来处理日志消息,并通过队列机制将日志消息缓冲起来。

这样可以避免应用程序因为日志写入而阻塞。

5. 插件系统:Log4j2提供了丰富的插件系统,可以通过扩展插件来增加新的功能。

例如,可以添加自定义的Appender、Filter、Layout等组件,来实现特定的日志处理需求。

总的来说,Log4j2的工作流程是:加载配置文件,根据配置文件记录日志消息,根据配置文件将日志消息输出到指定的目标。

通过异步处理和插件系统,Log4j2能够提供高性能和灵活的日志功能。

log4j2中文手册

log4j2中文手册

Log4j2使用手册一.Log4j2介绍Log4j1.x 被广泛应用于应用程序,但是近年发展明显放缓,因为要维持较老java版本的使用,使得log4j1.x 的发展更困难。

而作为其代替品,slf4j/logback 做出了许多必要改进,为什么还需要log4j2? 主要有以下几个原因: (1)Log4j2被设计用作审计日志框架, log4j 和logback 在重载配置时,都会丢失日志时间,而log4j2不会。

Logback中appenders中的异常对于应用来说是不可见的,log4j2可以配置异常向应用渗透。

(2)Log4j2 包含基于LMAX Disruptor library的下一代无锁Asynchronous Loggers ,在多线程环境下,Asynchronous Loggers 相比slf4j / logback 提高了10倍以上的吞吐量,并且有着更低的延时。

(3)Log4j2的插件机制,使得在不需要修改框架的情况下,通过添加 Appenders, Filters, Layouts, Lookups 轻松扩展框架。

(4)简单的插件配置,无需指定具体类名即可在configuration 中配置插件。

(5)支持自定义日志级别,可以在代码或者configuration 中自定义日志级别。

(6)支持lambda表达式,java8的应用可以在请求日志级别启用时使用lambda表达式懒构建一个日志消息,不需要显示的日志级别检查,使得代码更简洁。

(7)支持消息对象,消息允许支持有趣和复杂的结构,传递到日志记录系统,并且可以高效的操作。

用户可以自由创建消息类型和编写Layouts, Filters and Lookups 来操作这些消息。

(8)Log4j1在Appenders 上支持Filters。

logback增加了TurboFilters,允许在日志事件在处理前进行过滤。

Log4j2可以配置Filters 在Logger后者Appender 前运行。

idea log4j插件用法

idea log4j插件用法

1. 什么是Log4j插件Log4j是一个开源的日志记录框架,广泛应用于Java项目中。

Log4j插件是用于在开发过程中方便地使用Log4j框架的工具,能够帮助开发人员快速配置和管理日志记录功能。

2. Log4j插件的安装在使用Log4j插件之前,首先需要在开发环境中安装Log4j插件。

可以通过Maven或手动下载Jar包的方式将Log4j插件导入到项目中,然后在项目配置文件中声明Log4j插件的依赖关系。

3. Log4j插件的配置在项目中成功导入Log4j插件后,需要对插件进行配置。

首先需要创建一个Log4j配置文件(通常命名为log4j.properties或log4j.xml),在配置文件中指定日志记录的格式、输出目标、日志级别等参数。

4. 使用Log4j插件记录日志配置完成后,开发人员可以通过调用Log4j插件提供的API来记录日志。

开发人员可以在代码中插入日志记录语句,指定日志的级别(如DEBUG、INFO、WARN、ERROR等),以及日志的内容。

通过Log4j插件记录的日志可以输出到控制台、文件、数据库等不同的目标。

5. Log4j插件的优点Log4j插件提供了丰富的日志记录功能,可以根据需要灵活地配置日志记录的方式和输出目标。

Log4j插件具有较高的性能和稳定性,适用于各种规模的项目。

另外,Log4j插件支持多种日志级别,开发人员可以根据实际需要精细地控制日志的记录和输出。

6. Log4j插件的注意事项在使用Log4j插件的过程中,需要注意配置文件的正确指定和日志记录语句的合理使用。

对于不同的项目和需求,需要仔细选择适合的日志记录方式和输出目标,以便保证日志记录的准确性和便捷性。

7. 结语Log4j插件是一个优秀的日志记录工具,能够帮助开发人员轻松地实现日志记录的功能。

通过仔细的配置和合理的使用,开发人员可以充分发挥Log4j插件的优势,为项目提供有效的日志管理和追踪功能。

希望本文对大家了解Log4j插件的用法有所帮助。

log4j使用教程详解(怎么使用log4j2)

log4j使用教程详解(怎么使用log4j2)

log4j使⽤教程详解(怎么使⽤log4j2)1. 去官⽅下载log4j 2,导⼊jar包,基本上你只需要导⼊下⾯两个jar包就可以了(xx是乱七⼋糟的版本号):log4j-core-xx.jarlog4j-api-xx.jar2. 导⼊到你的项⽬中:这个就不说了。

3. 开始使⽤:我们知道,要在某个类中使⽤log4j记录⽇志,只需要申明下⾯的成员变量(其实不⼀定要是成员变量,只是为了⽅便调⽤⽽已)复制代码代码如下:private static Logger logger = LogManager.getLogger(MyApp.class.getName());⾥getLogger有⼀个参数指定的是这个logger的名称,这个名称在配置⽂件⾥⾯可是有需要的,这个待会⼉再说。

声明了Logger对象,我们就可以在代码中使⽤他了。

4. ⽇志的级别:我们现在要调⽤logger的⽅法,不过在这个Logger对象中,有很多⽅法,所以要先了解log4j的⽇志级别,log4j规定了默认的⼏个级别:trace<debug<info<warn<error<fatal等。

这⾥要说明⼀下:1)级别之间是包含的关系,意思是如果你设置⽇志级别是trace,则⼤于等于这个级别的⽇志都会输出。

2)基本上默认的级别没多⼤区别,就是⼀个默认的设定。

你可以通过它的API⾃⼰定义级别。

你也可以随意调⽤这些⽅法,不过你要在配置⽂件⾥⾯好好处理了,否则就起不到⽇志的作⽤了,⽽且也不易读,相当于⼀个规范,你要完全定义⼀套也可以,不⽤没多⼤必要。

3)这不同的级别的含义⼤家都很容易理解,这⾥就简单介绍⼀下:trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低⽇志级别不让他输出。

debug:调试么,我⼀般就只⽤这个作为最低级别,trace压根不⽤。

springboot配置log4j2日志,并输出到文件

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指定不同的⽇志级别等。

slf4j+log4j2的配置

slf4j+log4j2的配置

slf4j+log4j2的配置昨天⾃⼰测试了⼀下slf4j+log4j2的配置,可以正常使⽤,虽然配置⼗分简单,但好记性不如烂笔头,想想还是记录下来吧。

运⾏的环境:jdk1.7、tomcat7、Maven的web项⽬1.在新建的maven项⽬的pom⽂件中添加jar包依赖(依赖代码在步骤末尾):需要添加依赖的jar包有:slf4j的api接⼝包:slf4j-apilog4j2的核⼼包:log4j-corelog4j2的api接⼝包:log4j-apislf4j对应log4j2⽇志框架的驱动包:log4j-slf4j-impllog4j2的异步⽇志功能包:com.lmax.disruptor解决web项⽬log4j可能出现警告的jar包:log4j-web2.配置log4j2.xml⽇志配置⽂件(⽇志配置⽂件内容放在步骤末尾):·⽇志配置⽂件默认读取路径为src/main/resource·若⽂件放置在默认读取路径下则⽆需配置读取路径·若⽂件放置到其他路径下则需要在web.xml中设置⽇志配置⽂件的读取路径,代码如下:<context-param><param-name>log4jConfiguration</param-name><param-value>classpath:log4j2.xml</param-value></context-param>3.在代码中使⽤⽇志功能:1 import org.slf4j.Logger;2 import org.slf4j.LoggerFactory;34 public class logTest {56 // 通过slf4j接⼝创建Logger对象7 private static final Logger logger = LoggerFactory.getLogger(logTest.class);89 public static void main(String[] args) {10 ("this is info");11 logger.error("this is error");12 }13 }运⾏效果:关于⽇志配置⽂件的详细说明请参考,以下是pom.xml需要加⼊的jar包依赖以及⽇志配置⽂件log4j2.xml内容⽰例:pom.xml需要加⼊的jar包依赖:<properties><!-- jar包版本设置 --><slf4j.version>1.7.21</slf4j.version><log4j.version>2.11.0</log4j.version></properties><dependencies><!-- 导⼊slf4j的接⼝包以及对应⽇志框架的驱动包 --><!-- https:///artifact/org.slf4j/slf4j-api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><!--⽤于slf4j与log4j2保持桥接 --><!-- https:///artifact/org.apache.logging.log4j/log4j-slf4j-impl --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><scope>runtime</scope><version>${log4j.version}</version></dependency><!-- 导⼊⽇志框架核⼼包与接⼝包 --><!-- https:///artifact/org.apache.logging.log4j/log4j-core --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><scope>runtime</scope><version>${log4j.version}</version></dependency><!-- https:///artifact/org.apache.logging.log4j/log4j-api --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j.version}</version></dependency><!--⽤于解决web环境下关闭服务器时可能出现的log4j线程⽆法及时关闭的warn,web⼯程需要包含log4j-web,⾮web⼯程不需要 --> <!-- https:///artifact/org.apache.logging.log4j/log4j-web --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><scope>runtime</scope><version>${log4j.version}</version></dependency><!--使⽤log4j2的AsyncLogger时需要包含disruptor --><!-- https:///artifact/com.lmax/disruptor --><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><scope>runtime</scope><version>3.4.2</version></dependency></dependencies>⽇志配置⽂件内容⽰例:1<?xml version="1.0" encoding="UTF-8"?>23<!--4⽇志说明:56(1)请根据实际情况配置各项参数78(2)需要注意⽇志⽂件备份数和⽇志⽂件⼤⼩,注意预留⽬录空间910(3)实际部署的时候backupFilePatch变量需要修改成linux⽬录1112-->1314<configuration status="error">1516<Properties>1718<Property name="fileName">front.log</Property>1920<Property name="backupFilePatch">d:/usr/front/log/</Property>2122</Properties>2324<!--先定义所有的appender-->2526<appenders>2728<!--这个输出控制台的配置-->2930<Console name="Console" target="SYSTEM_OUT">3132<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->3334<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>3536<!--这个都知道是输出⽇志的格式-->3738<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>3940</Console>41424344<!--这个会打印出所有的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档--> 4546<RollingFile name="RollingFile" fileName="${backupFilePatch}/${fileName}"4748 filePattern="${backupFilePatch}$${date:yyyy-MM}/app-%d{yyyyMMddHHmmssSSS}.log.gz">4950<PatternLayout5152pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} %-5level %class{36} %L %M - %msg%xEx%n"/>53545556<!-- ⽇志⽂件⼤⼩ -->5758<SizeBasedTriggeringPolicy size="20MB"/>5960<!-- 最多保留⽂件数 -->6162<DefaultRolloverStrategy max="20"/>6364</RollingFile>6566</appenders>67686970<!--然后定义logger,只有定义了logger并引⼊的appender,appender才会⽣效-->7172<loggers>7374<!--建⽴⼀个logger,此logger监听name对应的包名下的⽇志输出,level表⽰⽇志级别-->7576<Logger name="com.testlog" level="trace"7778 additivity="true">7980<AppenderRef ref="RollingFile"/>8182</Logger>8384<!--建⽴⼀个默认的root的logger-->8586<Root level="error">8788<!-- 在root中关联appender才会在对应的位置输出⽇志,定义⼀个输出到⽂件的appender也必须关联到此处才会保存⽇志到⽂件 --> 8990<AppenderRef ref="Console"/>9192</Root>9394</loggers>9596</configuration>。

log4j2自动删除过期日志文件配置及实现原理解析

log4j2自动删除过期日志文件配置及实现原理解析

log4j2⾃动删除过期⽇志⽂件配置及实现原理解析 ⽇志⽂件⾃动删除功能必不可少,当然你可以让运维去做这事,只是这不地道。

⽽⽇志组件是⼀个必备组件,让其多做⼀件删除的⼯作,⽆可厚⾮。

本⽂就来探讨下 log4j 的⽇志⽂件⾃动删除实现吧。

0. ⾃动删除配置参考样例: (log4j2.xml)<?xml version="1.0" encoding="UTF-8" ?><Configuration status="warn" monitorInterval="30" strict="true"schema="Log4J-V2.2.xsd"><Properties><Property name="log_level">info</Property></Properties><Appenders><!-- 输出到控制台 --><Console name="Console" target="SYSTEM_OUT"><ThresholdFilter level="${log_level}" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%t] %p - %c - %m%n"/></Console><!-- 与properties⽂件中位置存在冲突,如有问题,请注意调整 --><RollingFile name="logFile" fileName="logs/app/test.log"filePattern="logs/app/history/test-%d{MM-dd-yyyy}-%i.log.gz"><ThresholdFilter level="${log_level}" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%p] [%c:%L] -- %m%n"/><Policies><!-- 按天递计算频率 --><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="500 MB"/><OnStartupTriggeringPolicy /></Policies><!-- 删除策略配置 --><DefaultRolloverStrategy max="5"><Delete basePath="logs/app/history" maxDepth="1"><IfFileName glob="*.log.gz"/><IfLastModified age="7d"/></Delete><Delete basePath="logs/app/history" maxDepth="1"><IfFileName glob="*.docx"/></Delete><Delete basePath="logs/app/history" maxDepth="1"><IfFileName glob="*.vsdx"/></Delete></DefaultRolloverStrategy></RollingFile><Async name="Async" bufferSize="2000" blocking="false"><AppenderRef ref="logFile"/></Async></Appenders><Loggers><Root level="${log_level}"><AppenderRef ref="Console"/><AppenderRef ref="Async"/></Root><!-- 配置个例 --><Logger name="com.xx.filter" level="info"/></Loggers></Configuration> 如果仅想停留在使⽤层⾯,如上log4j2.xml配置⽂件⾜矣! 不过,⾄少得注意⼀点,以上配置需要基于log4j2, ⽽如果你是 log4j1.x,则需要做下⽆缝升级:主要就是换下jar包版本,换个桥接包之类的,⽐如下参考配置:<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><!-- 桥接:告诉commons logging使⽤Log4j2 --><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.26</version></dependency><!-- 此处⽼版本,需注释掉 --><!--<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>--><dependency><groupId>mons</groupId><artifactId>commons-compress</artifactId><version>1.10</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>2.8.2</version></dependency> 如果还想多了解⼀点其运⾏原理,就跟随本⽂的脚步吧:1. ⾃动清理⼤体运⾏流程 ⾃动删除⼯作的运⾏原理⼤体流程如下。

flink 日志记录方法

flink 日志记录方法

flink 日志记录方法
Flink是一个流处理引擎,可以在分布式环境下运行。


Flink 中,日志记录是非常重要的一环,因为它可以帮助我们及时发现问题并调试代码。

本文将介绍 Flink 中的几种日志记录方法。

1. Flink 自带的日志记录
Flink 自带了日志记录功能,可以使用 log4j 进行日志记录。

默认情况下,Flink 会将所有的日志输出到控制台。

如果想要将日志记录到文件中,可以在 flink-conf.yaml 中设置相应的属性。

2. 通过 logback 记录日志
除了使用 log4j,还可以通过 logback 记录日志。

logback 是log4j 的一种替代方案,它的性能更好,配置更灵活。

要使用logback 记录日志,需要在 Flink 配置文件中指定 logback 的配置文件路径。

3. 自定义日志记录器
如果想要更加灵活地控制日志记录,可以自定义日志记录器。

可以通过继承 AbstractLogger 或者实现 Logger 接口来创建自定义日志记录器。

自定义日志记录器可以在 Flink 中使用,可以加入到 Flink 的日志记录器集合中。

总之,日志记录是 Flink 中非常重要的一环,它可以帮助我们及时发现问题并调试代码。

通过使用 Flink 自带的日志记录功能、logback 记录日志以及自定义日志记录器,我们可以更加灵活地控制日志输出。

SpringBoot使用logback、logstash、ELK记录日志文件的方法

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 很快就会得⼼应⼿。

详解关于tomcat切割catalina.out日志的三种方式

详解关于tomcat切割catalina.out日志的三种方式

详解关于tomcat切割catalina.out⽇志的三种⽅式1.log4j进⾏⽇志切分1)准备三个包:log4j-1.2.17.jar tomcat-juli.jar tomcat-juli-adapters.jar 放到tomcat的lib⽬录或者是⼯程的WEB_INF/lib下,2)在lib⽬录下新建log4j.properties,加⼊以下内容log4j.rootLogger = INFO, CATALINA# Define all the appenderslog4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.CATALINA.File = ${catalina.base}/logs/catalinalog4j.appender.CATALINA.Append = truelog4j.appender.CATALINA.Encoding = UTF-8# Roll-over the log once per daylog4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'yout = org.apache.log4j.PatternLayoutyout.ConversionPattern = %d [%t] %-5p %c- %m%nlog4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhostlog4j.appender.LOCALHOST.Append = truelog4j.appender.LOCALHOST.Encoding = UTF-8log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'yout = org.apache.log4j.PatternLayoutyout.ConversionPattern = %d [%t] %-5p %c- %m%nlog4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.MANAGER.File = ${catalina.base}/logs/managerlog4j.appender.MANAGER.Append = truelog4j.appender.MANAGER.Encoding = UTF-8log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'yout = org.apache.log4j.PatternLayoutyout.ConversionPattern = %d [%t] %-5p %c- %m%nlog4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-managerlog4j.appender.HOST-MANAGER.Append = truelog4j.appender.HOST-MANAGER.Encoding = UTF-8log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'yout = org.apache.log4j.PatternLayoutyout.ConversionPattern = %d [%t] %-5p %c- %m%nlog4j.appender.CONSOLE = org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Encoding = UTF-8yout = org.apache.log4j.PatternLayoutyout.ConversionPattern = %d [%t] %-5p %c- %m%n# Configure which loggers log to which appenders.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\INFO, MANAGER.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\INFO, HOST-MANAGER3)再tomcat根⽬录下,conf⽂件夹下,删除或者重命名logging.properties⽂件。

天地图数据解决方案

天地图数据解决方案

天地图数据解决方案捷泰政府事业部产品支持部2013年9月标题1概述“天地图”是国家地理信息公共服务平台公众版成果,是由国家测绘局主导建设的为公众、企业提供权威、可信、统一地理信息服务的大型互联网地理信息服务网站,旨在使测绘成果更好地服务大众。

运行于互联网、移动通信网等公共网络,以门户网站和服务接口两种形式向公众、企业、专业部门、政府部门提供24小时不间断“一站式”地理信息服务。

各类用户可以通过“天地图”的门户网站进行基于地理位置的信息浏览、查询、搜索、量算,以及路线规划等各类应用;也可以利用服务接口调用“天地图”的地理信息服务,并利用编程接口将“天地图”的服务资源嵌入到已有的各类应用系统(网站)中,并以“天地图”的服务为支撑开展各类增值服务与应用,从而有效缓解地理信息资源开发利用中技术难度大、建设成本高、动态更新难等突出问题。

“天地图”的目的在于促进地理信息资源共享和高效利用,提高测绘地理信息公共服务能力和水平,改进测绘地理信息成果的服务方式,更好地满足国家信息化建设的需要,为社会公众的工作和生活提供方便。

在各省市“天地图”的构建过程中,Esri中国(北京)信息技术有限公司针对整个平台服务的搭建提供了相应的解决方案,不仅形成了一套完全符合电子地图规范的地图制图模板,也提供了一套符合规范的服务接口以便于对接到天地图主节点,因此本文就整个天地图数据服务的构建提供说明。

北京捷泰天域科技有限公司|[天地图数据解决方案]2天地图数据解决方案流程天地图数据解决方案电子地图制作数据预处理格式转换、数据整合坐标转换、数据集构建数据分层、属性结构电子地图配图数据分类符号渲染配图优化制作缓存服务发布制作缓存服务接口WMTS ArcGIS9.3.1./10.0ArcGIS10.1WFS-GCSW3电子地图制作3.1天地图数据规范地理实体数据及电子地图数据规范详见:《CH/Z9010-2011地理信息公共服务平台地理实体与地名地址数据规范》《地理信息公共服务平台电子地图数据规范CH/Z9011—2011》《1:400万-1:5万地理实体数据整合技术要求》(20100201:试行稿)3.2电子地图配图及缓存进行电子地图制作与服务发布主要包括三个步骤:前期数据处理、电子地图配图和地图服务发布。

springboot:使用log4j2做异步日志打印(springboot2.3.1)

springboot:使用log4j2做异步日志打印(springboot2.3.1)

springboot:使⽤log4j2做异步⽇志打印(springboot2.3.1)⼀,为什么要使⽤log4j2?log4j2是log4j的升级版,升级后更有优势:性能更强/吞吐量⼤/⽀持异步功能扩展/⽀持插件/⽀持⾃定义级别等这些优势可以从它的官⽹了解log4j2官⽅⽹站:https:///log4j/2.x/说明:刘宏缔的架构森林是⼀个专注架构的博客,地址:对应的源码可以访问这⾥获取:说明:作者:刘宏缔邮箱: 371125307@⼆,本演⽰项⽬的相关信息1,项⽬地址:https:///liuhongdi/tomcatlogs2,项⽬原理:⽣成两个⽇志:bussiness⽇志:负责记录业务相关的⽇志error⽇志:负责记录系统中的错误⽇志3,项⽬结构:三, log4j2的相关配置1,⽇志级别的优先级:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF说明:如果我们设置⽇志级别为:WARN,则记录的级别包括:WARN / ERROR / FATAL / OFF。

2,logger的additivity属性:如果设置为false,logger不会把⽇志流添加到root的⽇志如果设置为true,则会添加到root的⽇志说明:如果是异步⽇志时,建议设置为false3,Appender的immediateFlush属性:作⽤:⽴刻刷写到磁盘如果设置为false,能明显⽰的提升性能即使是同步⽇志也有帮助4,includeLocation=“true”说明:includeLocation⽤来获取类的路径,值只有设置为true时才会⽣效5,AsyncRoot/AsyncLogger都需要⽤到disruptor功能,所以⽆论⽤哪个都需要引⼊disruptor功能包四,配置⽂件说明:1,pom.xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!--log4j2 begin--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.2</version></dependency><!--log4j2 end-->说明1:spring-boot-starter-web默认包含了⽇志功能包,包含了logback/slf4j两个⽇志包,所以我们需要⽤excusion排除对此两个包的依赖说明2:log4j的异步⽇志使⽤了Disruptor的队列技术,我们需要使⽤异步⽇志,所以这⾥需要引⼊Disruptor,附:Disruptor在mvn上的地址:可以从这⾥查看版本https:///artifact/com.lmax/disruptor2,application.properties#log4j2logging.config=classpath:log4j2.xml说明:指定log4j2配置⽂件的路径,放到resources⽬录下3,log4j2.xml:<?xml version="1.0" encoding="UTF-8"?><Configuration status="INFO"><Appenders><Console name="STDOUT" target="SYSTEM_OUT"><PatternLayout pattern=".%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%file:%line]%-5level %logger{36} - %msg %n"/></Console><RollingFile immediateFlush="false" name="ErrorFile" fileName="/data/logs/tomcatlogs/error.log"filePattern="/data/logs/tomcatlogs/$${date:yyyy-MM}/error-%d{MM-dd-yyyy}-%i.log"><Filters><ThresholdFilter level="INFO" /></Filters><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%file:%line] %-5level %logger{35} - %msg %n</Pattern> </PatternLayout><Policies><TimeBasedTriggeringPolicy /><SizeBasedTriggeringPolicy size="102400KB"/></Policies></RollingFile><RollingFile immediateFlush="false" name="BusinessFile" fileName="/data/logs/tomcatlogs/bussiness.log"filePattern="/data/logs/tomcatlogs/$${date:yyyy-MM}/bussiness-%d{MM-dd-yyyy}-%i.log"><PatternLayout><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%file:%line] %-5level %logger{35} - %msg %n</Pattern> </PatternLayout><Policies><TimeBasedTriggeringPolicy /><SizeBasedTriggeringPolicy size="102400KB"/></Policies></RollingFile></Appenders><Loggers><AsyncLogger name="BusinessFile" level="info" additivity="false"><appender-ref ref="BusinessFile"/></AsyncLogger><AsyncRoot level="info" includeLocation="true"><AppenderRef ref="STDOUT"/><AppenderRef ref="ErrorFile" /></AsyncRoot></Loggers></Configuration>说明:ErrorFile放到asyncRoot下,⽤来记录系统的所有信息BusinessFile则⽤来记录业务相关的⽇志(需要靠代码⽣成⽇志)五,java代码说明1,homecontroller.java@RestController@RequestMapping("/home")public class HomeController {@GetMapping("/list")@ResponseBodypublic String list() {Logger logger1 = LogManager.getLogger(this.getClass());Logger logger2 = LogManager.getLogger("BusinessFile");("hello,this is in errorlog");("hello,this is in businesslog");return "this is list";}}说明:获取logger时,如果使⽤class,会保存到root下指定的⽇志如果使⽤指定的⽇志AppenderRef名字,则会保存到名字对应的⽇志六,测试写⽇志的效果:1,访问urlhttp://127.0.0.1:8080/home/list2,查看所写⼊的⽇志:[liuhongdi@localhost tomcatlogs]$ tail -1 bussiness.log2020-07-0522:46:07.208 [http-nio-8080-exec-7] [:] INFO BusinessFile - hello,this is in businesslogge[liuhongdi@localhost tomcatlogs]$ tail -1 error.log2020-07-0522:46:07.208 [http-nio-8080-exec-7] [HomeController.java:20] INFO com.tomcatlogs.demo.controller.HomeController - hello,this is in errorlog 可以看到⽇志写⼊成功七,查看spring boot的版本:. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \(( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.3.1.RELEASE)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(2)解决log4j输出的日志文件的位置的配置问题
我一直希望自己的web应用的配置能够简化,最好的方式就是打个包后扔哪都能用,即使非得再做一些配置的话,也希望只是一些连接池的配置信息。这个目标在现在手头的这个项目中也几乎达到了,除了log文件的位置。
在log4j的配置文件中对于log输出的路径一向都是使用绝对路径,这样就导致在不同的机器上部署时都得重新定义一下log文件的输出位置。虽说费时不多,可对于我这种宁可少一事,不愿多一事的人来说,总是觉得有点郁闷。
仅从字面上理解,也可以大致得出结论:最常用的应该是debug()和info();而warn()、error()、fatal()仅在相应事件发生后才使用。
从上面三个步骤可以看出,使用commons-logging的日志接口非常的简单,不需要记忆太多东西:仅仅用到了两个类Log, LogFactory,并且两个类的方法都非常少(后者只用到一个方法,前者经常用到的也只是上面第三步中列出的几个),同时参数又非常简单。
import mons.logging.LogFactory;
public class TestLog
{
private static Log log = LogFactory.getLog(TestLog.class);
public void test()
3、使用mons.logging.Log类的成员方法输出日志信息:
log.debug("111");
("222");
log.warn("333");
log.error("444");
log.fatal("555");
强调一点,“同时使用commons-logging和Log4j”,与“单独使用Log4j”相比,并不会带来更大的学习、配置和维护成本,反而更加简化了我们的工作。我想这也是为什么“所有用到Log4j的项目一般也同时会用到commons-loggin”的原因之一吧。
Commons-logging能帮我们做什么?
谢谢,这种方法是可以的,我后来用了另一个方法,就是做一个servlet,在系统加载的时候,就把properties的文件读到一个properties文件中.那个file的属性值(我使用的是相对目录)改掉(前面加上系统的根目录),让后把这个properties对象设置到propertyConfig中去,这样就初始化了log的设置.在后面的使用中就用不着再配置了
踏破铁鞋无觅,得来不费功夫。不经意见看到了一个文档,介绍说log4j的配置文件支持windows的环境变量,格式类似velocity:${env},ok,问题解决:
一般来说我们会将一些初始化的信息放到web.xml中,以便在系统启动时就运行。循此思路,将log文件的位置放到webapp下面的任意处,如webapp/WEB-INF/conf/logs下面,则可以在log4j.pro
log.debug("111");
("222");
log.warn("333");
log.error("444");
如果愿意简化的话,还可以两行合为一行:
import mons.logging.*;
2、在自己的类中定义一个mons.logging.Log类的私有静态类成员:
private static Log log = LogFactory.getLog(YouClassName.class);
注意这里定义的是static成员,以避免产生多个实例。
LogFactory.getLog()方法的参数使用的是当前类的class,这是目前被普通认为的最好的方式。为什么不写作LogFactory.getLog(this.getClass())?因为static类成员访问不到this指针!
log4j.appender.R.File=${webappHome}/WEB-INF/conf/logs/sysout.log
其中的${webappHome}即是通过System.setProperty("webappHome", webappHome);实现的,此操作可通过一初始的servlet进行,具体方法略
1) 首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类;
2) 如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量mons.logging.Log,找到则使用其定义的Log实现类;
这里的log,就是上面第二步中定义的类成员变量,其类型是mons.logging.Log,通过该类的成员方法,我们就可以将不同性质的日志信息输出到目的地(目的地是哪里?视配置可定,可能是stdout,也可能是文件,还可能是发送到邮件,甚至发送短信到手机……详见下文对log4j.properties的介绍):
(以上顺序不保证完全准确,请参考官方文档)
可见,commons-logging总是能找到一个日志实现类,并且尽可能找到一个“最合适”的日志实现类。我说它“很贴心”实际上是因为:1、可以不需要配置文件;2、自动判断有没有Log4j包,有则自动使用之;3、最悲观的情况下也总能保证提供一个日志实现(SimpleLog)。
l debug() 输出“调试”级别的日志信息;
l info() 输出“信息”级别的日志信息;
l warn() 输出“警告”级别的日志信息;
l error() 输出“错误”级别的日志信息;
l fatal() 输出“致命错误”级别的日志信息;
我能否在程序中指定输出的日志文件到工程的目录下面:比如struts中的
getServlet().getServletContext().getRealPath("");
---------------------------------------------------------------
就这么简单!
代码应该怎么写?
我们在需要输出日志信息的“每一人”类中做如下的三个工作:
1、导入所有需的commongs-logging类:
import mons.logging.Log;
import mons.logging.LogFactory;
4月21日
log4j日志文件路径的配置 - -转载
前段时间配置了log4j,发现这玩意也是嗷嗷功能强大,偶比较菜,以前都是System.out.println(...)
想起就惭愧啊
主要就是日志文件的路径配置,在网上搜了很就才找到,可以自己指定日志路径
部分摘至:/develop/article/21/21291.shtm
上面所介绍的方法是目前被普通应用的,可以说是被标准化了的方法,几乎所有的人都是这么用。如果不信,或想确认一下,就去下载几个知名的Java开源项目源代码看一下吧。
下面给出一个完整的Java类的代码:
package liigo.testlog;
import mons.logging.Log;
16:40 | 添加评论 | 固定链接 | 写入日志 | commons-logginglog4j使用方法 ---转载
为什么要用日志(Log)?
这个……就不必说了吧。
为什么不用System.out.println()?
功能太弱;不易于控制。如果暂时不想输出了怎么办?如果想输出到文件怎么办?如果想部分输出怎么办?……
可以看到,commons-logging对编程者和Log4j都非常友好。
为了简化配置commons-logging,一般不使用commons-logging的配置文件,也不设置与commons-logging相关的系统环境变量,而只需将Log4j的Jar包放置到classpash中就可以了。这样就很简单地完成了commons-logging与Log4j的融合。如果不想用Log4j了怎么办?只需将classpath中的Log4j的Jar包删除即可。
3) 否则,查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类;
4) 否则,使用JDK自身的日志实现类(JDK1.4以后才有日志实现类);
5) 否则,使用commons-logging自己提供的一个简单的日志实现类SimpleLog;
String logFile = getServlet().getServletContext().getRealPath("/");
logger.addAppender( new DailyRollingFileAppender( new PatternLayout( "%d %-5p %c %x - %m%n" ), logFile, "'.'yyyy-MM-dd") );
为什么同时使用commons-logging和Log4j?为什么不仅使用其中之一?
Commons-loggin的目的是为“所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱(只有一个简单的SimpleLog?),所以一般不会单独使用它。
Log4j的功能非常全面强大,是目前的首选。我发现几乎所有的Java开源项目都会用到Log4j,但我同时发现,所有用到Log4j的项目一般也同时会用到commons-loggin。我想,大家都不希望自己的项目与Log4j绑定的太紧密吧。另外一个我能想到的“同时使用commons-logging和Log4j”的原因是,简化使用和配置。
l 提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密a耦合
相关文档
最新文档