log4j+commons-logging结合使用

合集下载

java中使用日志

java中使用日志

java中使用日志在Java中,日志是一种用于记录应用程序运行时信息的重要工具。

它可以帮助开发人员在应用程序中定位问题、调试代码以及监控系统运行情况。

Java提供了多种日志框架和API,最常用的是Java自带的java.util.logging和第三方库Log4j和Logback。

1. 使用java.util.logging:Java自带的日志框架是java.util.logging(JUL),它是在JDK中内置的一个简单的日志系统。

使用JUL,你需要创建一个Logger对象,然后使用不同级别的日志方法(如info、warning、severe)记录日志信息。

可以通过设置日志级别、输出格式和日志处理器来配置JUL。

优点,不需要引入额外的依赖,简单易用。

缺点,功能相对较弱,配置相对繁琐。

2. 使用Log4j:Log4j是一个功能强大且广泛使用的日志框架。

它提供了丰富的配置选项和灵活的日志级别控制。

使用Log4j,你需要在项目中引入Log4j的依赖,然后配置一个log4j.properties或log4j.xml文件,指定日志输出的格式、位置和级别。

在代码中,你可以通过获取Logger对象并调用不同级别的日志方法来记录日志信息。

优点,功能强大、配置灵活、性能较好。

缺点,需要引入额外的依赖。

3. 使用Logback:Logback是Log4j框架的改进版本,也是目前广泛使用的日志框架之一。

它提供了与Log4j类似的功能,但性能更好。

使用Logback,你需要在项目中引入Logback的依赖,然后配置一个logback.xml文件,指定日志输出的格式、位置和级别。

在代码中,你可以通过获取Logger对象并调用不同级别的日志方法来记录日志信息。

优点,性能较好、配置灵活、与Log4j兼容。

缺点,需要引入额外的依赖。

总结:以上是Java中使用日志的常见方式。

选择合适的日志框架取决于你的需求和偏好。

无论你选择哪种方式,良好的日志记录可以帮助你更好地理解应用程序的运行情况,快速定位问题并进行调试。

Websphere+中生成日志问题

Websphere+中生成日志问题

websphere v6按照系统默认设置会采用本身的日志系统及格式,如果想用自定义的输出方式来输出日志信息(如:apache的commons-logging),需以下几个步骤配置:1)修改commons-logging.jar,在该jar的META-INF中添加一个新的目录"services"在该文件夹下添加名为"mons.logging.LogFactory"的文件,文件中写入一行"mons.logging.impl.Log4jFactory"2)在控制台中的"环境->共享库"页面中添加一个共享库,类路径指向要采用的日志文件,这里是添加commons-logging.jar和Log4j.jar,保存设置.3)在"企业应用程序> 你的应用程序> 库引用"下添加刚才创建的共享库,将"类装入器方式"改为最后装入父类*****************************************************Websphere 中生成日志问题在Websphere中,配置了log4j.properties文件,但是在相应的目录下并没有产生日志文件,解决方法如下:1)修改commons-logging.jar,在该jar的META-INF中添加一个新的目录"services"在该文件夹下添加名为"mons.logging.LogFactory"的文件,文件中写入一行"mons.logging.impl.Log4jFactory"2)在控制台中的"环境->共享库"页面中添加一个共享库,类路径指向要采用的日志包文件(例如:/opt/IBM/WebSphere/AppServer/profiles/default/installedApps/omissNode01C ell/ic1_war.ear/ic1.war/….. commons-logging.jar3)/opt/IBM/WebSphere/AppServer/profiles/default/installedApps/omissNode01Cell/ic1_war.ear/ic1.war/…..Log4j.jar,),保存设置.例如建立一个名字为ic的共享库:选择共享库,进入如下画面:填写类路径(即日志文件所在的路径)4)在"企业应用程序> 你的应用程序> 库引用"下添加刚才创建的共享库,将"类载入器方式"改为最后装入父类。

springboot项目配置logback日志系统的实现

springboot项目配置logback日志系统的实现

springboot项⽬配置logback⽇志系统的实现记录springboot项⽬配置logback⽇志⽂件管理:logback依赖jar包SpringBoot项⽬配置logback理论上需要添加logback-classic依赖jar包:<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency>但是因为SpringBoot项⽬默认就是使⽤的就是logback⽇志系统,创建SpringBoot项⽬时引⼊的spring-boot-starter或者spring-boot-starter-web依赖jar包中已经包含了spring-boot-starter-logging的依赖,⾥⾯同时包含多种⽇志系统依赖,如下图所⽰:包括logback和log4j,所以,⽆需额外添加依赖,直接配置logback.xml就可以了。

此外,如果需要切换为log4j2,那么需要在spring-boot-starter-web依赖中排除springboot⾃带的commons‐logging,然后在引⼊log4j2的依赖jar包,如下所⽰:<!--排除 commons‐logging--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>commons‐logging</groupId><artifactId>commons‐logging</artifactId></exclusion></exclusions></dependency><!--引⼊log4j2 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>logback的默认配置前⾯说到SpringBoot项⽬默认使⽤logback,那么对于logback的配置情况,SpringBoot⼜是如何定义的呢?⾸先,SpringBoot会从resource包下查找logback-test.xml或logback.xml,如果这两个都不存在,则会调⽤BasicConfigurator,创建⼀个最⼩化的基本配置。

Log4j配置最全说明

Log4j配置最全说明

Log4j配置最全说明1. log4j 的配置文件Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是Java 特性文件 lg4j.properties (键 = 值)。

1.1. log4j configuration scripts in properties formatlg4j.properties 文件作为作为常用的配置文件的方法如下:配置根 LoggerLogger 负责处理日志记录的大部分操作。

其语法为:log4j.rootLogger = [ level ] , appenderName, appenderName, … 其中, level 是日志记录的优先级,分为 OFF 、 FATAL 、 ERROR 、WARN 、 INFO 、 DEBUG 、 ALL 或者自定义的级别。

Log4j 建议只使用四个级别,优先级从高到低分别是 ERROR 、 WARN 、INFO 、 DEBUG 。

通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。

比如在这里定义了 INFO 级别,只有等于及高于这个级别的才进行处理,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来。

ALL: 打印所有的日志, OFF :关闭所有的日志输出。

appenderName 就是指定日志信息输出到哪个地方。

可同时指定多个输出目的地。

Appender配置日志信息输出目的地 Appender 负责控制日志记录操作的输出。

其语法为:log4j.appender.appenderName =.of.appender.classlog4j.appender.appenderName.option1 = value1log4j.appender.appenderName.optionN = valueN其中, Log4j 提供的 appender 有以下几种:org.apache.log4j.ConsoleAppender (控制台),org.apache.log4j.FileAppender (文件),org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件),org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB 设置文件大小,还可通过log4j.appender.R.MaxBackupIndex=1 设置为保存一个备份文件。

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级别及以上的日志才会被输出。

Mybatis的Log4j日志输出问题-以及有关日志的所有问题

Mybatis的Log4j日志输出问题-以及有关日志的所有问题

Mybatis的Log4j⽇志输出问题-以及有关⽇志的所有问题使⽤Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)⽇志。

有些时候就不能。

⽆法输出⽇志的时候,⽆论怎么配置log4j,不管是properties的还是xml的,都不起作⽤。

有些时候,我们没做什么配置就能输出⽇志....这是⼀个让⽆数⼈烦躁的问题。

其实解决问题很容易(我过了这么久才解决,以前都⽤拦截器输出)。

这是⼀个普⼤喜奔的⽇⼦,让我们⼀起来看看如何解决mybatis的⽇志问题。

为什么说这个问题很容易解决呢?因为mybatis的⽂档写的很清楚。

为什么我们都没找到解决办法呢?因为即使看过⽂档的⼈,也未必去看Logging这⼀节。

但是这⼀节正是解决问题的关键。

已经等不及的⼩伙伴们可以直接去这⾥看⽂档:提醒最常⽤的⽅法不再这个链接中,但是这个⽂档提供了对log4j的详细配置。

本⽂下⾯的内容⼤部分是这个⽂档的Copy。

Mybatis内置的⽇志⼯⼚提供⽇志功能,具体的⽇志实现有以下⼏种⽅式:SLF4JApache Commons LoggingLog4j 2Log4jJDK logging具体选择哪个⽇志实现由MyBatis的内置⽇志⼯⼚确定。

它会使⽤最先找到的(按上⽂列举的顺序查找)。

如果⼀个都未找到,⽇志功能就会被禁⽤。

不少应⽤服务器的classpath中已经包含Commons Logging,如Tomcat和WebShpere,所以MyBatis会把它作为具体的⽇志实现。

记住这点⾮常重要。

这意味着,在诸如 WebSphere的环境中——WebSphere提供了Commons Logging的私有实现,你的Log4J配置将被忽略。

这种做法不免让⼈悲摧,MyBatis怎么能忽略你的配置呢?事实上,因Commons Logging已经存在,按优先级Log4J⾃然就被忽略了!不过,如果你的应⽤部署在⼀个包含Commons Logging的环境,⽽你⼜想⽤其他的⽇志框架,你可以根据需要调⽤如下的某⼀⽅法:eSlf4jLogging();eLog4JLogging();eJdkLogging();eCommonsLogging();eStdOutLogging();如果的确需要调⽤以上的某个⽅法,请在调⽤所有其他MyBatis⽅法前调⽤它。

SLF4J中文手册

SLF4J中文手册

SLF4J中文手册SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。

按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。

实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。

从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。

如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

典型的使用模式下面同样的代码展示了SLF4J 的典型使用模式。

注意第15行{}-占位符的使用。

更多详细内容请查看FAQ中的问题"What is the fastest way of logging?"1:import org.slf4j.Logger;2:import org.slf4j.LoggerFactory;3:4:public class Wombat{5:6:final Logger logger =LoggerFactory.getLogger(Wombat.class); 7:Integer t;8:Integer oldT;9:10:public void setTemperature(Integer temperature){11:12: oldT = t;13: t = temperature;14:15:logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);16:17:if(temperature.intValue()>50){18:("Temperature has risen above 50 degrees."); 19:}20:}21:}在部署阶段绑定某个日志框架前面提到过,SLF4J 支持多种日志框架。

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压根不⽤。

华为JAVA编程规范

华为JAVA编程规范
规则5 if, for, do, while, case, switch, default 等语句自占一行,且if, for, do, while,switch等语句 的执行语句无论多少都要加括号{},case 的执行语句中如果定义变量必须加括号{}。 (1.42+)
说明:阅读代码更加清晰,减少错误产生 示例: if (a>b) {
说明:异常注释用@exception或@throws表示,在JavaDoc中两者等价,但推荐用@exception标注 Runtime异常,@throws标注非Runtime异常。异常的注释必须说明该异常的含义及什么条件下抛 出该异常。
Page 5 , Total 19
密级:内部公开
规则7 注释应与其描述的代码相近,对代码的注释应放在其上方,并与其上面的代码用空行隔 开,注释与所描述内容进行同样的缩排。(1.42+)
规则12 对重载父类的方法必须进行@Override声明(5.0+)
Page 6 , Total 19
密级:内部公开
说明:可清楚说明此方法是重载父类的方法,保证重载父类的方法时不会因为单词写错而造成错 误(写错方法名或者参数个数,类型都会编译无法通过) 示例: @Override public void doRequest(SipServletRequest req) throws ServletException,
分配对应日志类型的logreader指定类型查询时间段条件和反复器缓冲数查询时间为左包含原则即starttimeendtimeparamlogtypename日志类型名在配置文件中定义的paramstarttime查询日志的开始时间paramendtime查询日志的结束时间paramloglevel查询日志的级别paramusername查询该用户的日志parambuffernum日志反复器缓冲记录数return结果集日志反复器since12publicstaticlogiteratorreadstringlogtypedatestarttimedateendtimeintloglevelstringusernameintbuffernum规则6对于方法内部用throw语句抛出的异常必须在方法的注释中标明对于所调用的其他方法所抛出的异常选择主要的在注释中说明

Java中各jar的作用

Java中各jar的作用

Java中各jar的作⽤jta.jar 标准JTA API必要commons-collections.jar 集合类必要antlr.jar ANother Tool for Language Recognition 必要asm.jar ASM字节码库如果使⽤“cglib” 则必要asm-attrs.jar ASM字节码库如果使⽤“cglib” 则必要ehcache.jar EHCache缓存如果没有其他的缓存,则是必要的cglib.jar CGLIB字节码解释器如果使⽤“cglib” 则必要commons-beanutils.jar 提供对Java反射和⾃省API的包装对bean操作的类,可以访问类的属性及get和set⽅法commons-digester.jar Digester基于规则的XML⽂档解析,主要⽤于XML到java对象的映射commons-lang.jar 包含了⼀些数据类型⼯具类,是ng.* 的扩展必须使⽤的包commons-pool.jar,commons-dbcp.jar DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCPcommons-chain.jar Jakarta Commons的⼦项⽬Chain将上述两个模式组合成⼀个可复⽤的Java框架⽤于描述顺序的处理流程 strutsheShale 应⽤框架作为处理HTTP请求处理的基础机制commons-validator.jar ⽤来帮助进⾏验证的⼯具。

⽐如验证Email字符串,⽇期字符串等是否合法。

Burlap.jar ⽀持ejb,远程调⽤Remoting⽅⾯的类buffalo.jar 处理xml的jar包commons-betwixt.jar ⽤xml⽣成报表时需要⽤到的包commons-el.jar Apache 组织中⼀个⽤来解析 JSP 2.0 的表达式语⾔的 Javahtmlparser.jar 是⼀个纯的java写的html解析的库,它不依赖于其它的java库⽂件,主要⽤于改造或提取html类库jakarta-oro.jar java正则表达式所需的包jaxen.jar 在jdom中使⽤xpath需要导⼊jaxen.jar包mina-core.jar Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织⼀个较新的项⽬,它为开发⾼性能和⾼可⽤性的⽹络应⽤程序提供了⾮常便利的框架这⾥主要介绍的是hibernate使⽤到的.jarHibernate⼀共包括了23个jar包,令⼈眼花缭乱。

java中log的使用方法

java中log的使用方法

java中log的使用方法在软件开发过程中,日志记录是一项非常重要的任务。

在Java 中,我们可以使用Log来记录应用程序的运行信息,以便在应用程序出现问题时进行排查和调试。

本文将介绍Java中Log的使用方法,包括Log的基本概念、Log 的级别、Log的输出方式、Log的配置以及常见的Log框架。

一、Log的基本概念Log是指记录应用程序运行过程中的各种信息,包括错误信息、警告信息、调试信息等等。

Log记录的信息可以帮助我们在应用程序出现问题时进行排查和调试。

在Java中,我们可以使用Java自带的Log API来记录日志信息。

Java中的Log API包括以下几个类:1. Logger:用于记录日志信息的主要类。

可以通过Logger类的静态方法获取Logger实例,然后使用Logger实例记录日志信息。

2. Level:用于指定日志记录的级别。

Java中的Log API提供了7个级别,从低到高分别是:ALL、FINEST、FINER、FINE、CONFIG、INFO、WARNING、SEVERE、OFF。

3. Handler:用于指定日志记录的输出方式。

Java中的Log API 提供了多种Handler,包括ConsoleHandler、FileHandler、SocketHandler等等。

二、 Log的级别在Java中,日志记录的级别分为7个等级,从低到高分别是ALL、FINEST、FINER、FINE、CONFIG、INFO、WARNING、SEVERE、OFF。

不同的级别代表着不同的日志记录方式。

1. ALL:记录所有级别的日志信息。

2. FINEST:记录最详细的日志信息,包括非常细节的信息。

3. FINER:记录比FINEST略低级别的日志信息。

4. FINE:记录比FINER略低级别的日志信息。

5. CONFIG:记录配置信息。

6. INFO:记录一般性的信息。

7. WARNING:记录警告信息。

java代码中添加log4j日志

java代码中添加log4j日志

java代码中添加log4j⽇志1.得到记录器使⽤Log4j,第⼀步就是获取⽇志记录器,这个记录器将负责控制⽇志信息。

其语法为:public static Logger getLogger( String name),通过指定的名字获得记录器,如果必要的话,则为这个名字创建⼀个新的记录器。

Name⼀般取本类的名字,⽐如:static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;2.读取配置⽂件当获得了⽇志记录器之后,第⼆步将配置Log4j环境,其语法为://1.⾃动快速地使⽤缺省Log4j环境。

BasicConfigurator.configure ();//2.读取使⽤Java的特性⽂件编写的配置⽂件。

PropertyConfigurator.configure ( String configFilename);//3.读取XML形式的配置⽂件。

DOMConfigurator.configure ( String filename );//4.添加配置信息SimpleLayout simpleLayout = new SimpleLayout();try { FileAppender fa = new FileAppender(simpleLayout, "test.log"); logger.addAppender(fa); logger.setLevel(Level.ERROR); logger.error(Object obj );} catch (IOException e1) {//...}四种⽅式任选其⼀3.插⼊记录信息(格式化⽇志信息)当上两个必要步骤执⾏完毕,您就可以轻松地使⽤不同优先级别的⽇志记录语句插⼊到您想记录⽇志的任何地⽅,其语法如下:。

Java中打印日志的几种方式

Java中打印日志的几种方式

Java中打印⽇志的⼏种⽅式前⾔在Java 中实现记录⽇志的⽅式有很多种,1. 最简单的⽅式,就是system.println.out(error) ,这样直接在控制台打印消息了。

2. Java.util.logging ; 在JDK 1.4 版本之后,提供了⽇志的API ,可以往⽂件中写⽇志了。

3. log4j , 最强⼤的记录⽇志的⽅式。

可以通过配置 .properties 或是 .xml 的⽂件,配置⽇志的⽬的地,格式等等。

4. commons-logging, 最综合和常见的⽇志记录⽅式,经常是和log4j 结合起来使⽤。

Java.util.logging –JDK 记录⽇志⽅式system.print 这就不⽤多说了,直接看⼀下Java api 中 logging ⽇志的使⽤例⼦:import java.io.IOException;import java.util.Date;import java.util.logging.FileHandler;import java.util.logging.Formatter;import java.util.logging.Level;import java.util.logging.LogRecord;import java.util.logging.Logger;public class TestLogJava {public static void main(String[] args) throws IOException{Logger log = Logger.getLogger("tesglog");log.setLevel(Level.ALL);FileHandler fileHandler = new FileHandler("testlog.log");fileHandler.setLevel(Level.ALL);fileHandler.setFormatter(new LogFormatter());log.addHandler(fileHandler);("This is test java util log");}}class LogFormatter extends Formatter {@Overridepublic String format(LogRecord record) {Date date = new Date();String sDate = date.toString();return "[" + sDate + "]" + "[" + record.getLevel() + "]"+ record.getClass() + record.getMessage() + "\n";}}这⾥是在eclipse 下code 和测试的。

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. ⾃动清理⼤体运⾏流程 ⾃动删除⼯作的运⾏原理⼤体流程如下。

springboot学习(六)springboot各版本中使用log4j2记录日志

springboot学习(六)springboot各版本中使用log4j2记录日志

springboot学习(六)springboot各版本中使⽤log4j2记录⽇志spring boot 各版本中使⽤ log4j2 记录⽇志前⾔Spring Boot中默认⽇志⼯具是logback,只不过我不太喜欢logback。

为了更好⽀持 spring boot 框架,我使⽤log4j。

spring boot 各版本与 log4j 的⽀持情况1. spring boot 1.2.X 版本spring boot 1.2.X版本⼀般建议使⽤默认⽇志⼯具(logback),也可以使⽤ log4j。

但,注意的是:Spring Boot 1.2.4.RELEASE包含⼀个bug,。

所以,当你通过application.properties定义⽇志级别时,该错误会更改⽗记录器级别,在最差情况下会更改根记录器级别。

虽然这个bug是修复在1.2.6.RELEASE,我建议⾄少使⽤1.2.8.RELEASE(如果你想坚持1.2.x)。

因为 spring boot 现在仍然在快速发展阶段,版本更新较快,有时候就会因为版本问题⽽出现各种奇奇怪怪的bug。

2. spring boot 1.3.X 版本spring boot 从 1.3.X 版本开始⽀持slf4j+log4j/log4j2。

* ⾸先,先解决为什么使⽤ SL4J Facade?对于这个问题,⽹上已经有许多精彩地点答案了,我就直接附上其中⼀篇的地址了:。

同时,附上⼀张⼯作流程图:然后,就是在⾃⼰的 springboot 项⽬中使⽤ log4j。

补充⼀下,由于⽅法⼀样,我将slf4j+log4j2放到了1.4.X版本中来应⽤。

1.创建⼀个1.3.X版本的 spring boot 项⽬(记得排除logback-classic的依赖)。

12 3 4 5 6 7 8 9 10<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId> </exclusion></exclusions></dependency>2.引⼊ SL4J 依赖。

Log4j不同模块输出到不同的文件中

Log4j不同模块输出到不同的文件中

Log4j不同模块输出到不同的⽂件中1、实现⽬标 不同业务的⽇志信息需要打印到不同的⽂件中,每天或者每个⼩时⽣成⼀个⽂件。

如,注册的信息打印到register.log,每天凌晨⽣成⼀个register-年⽉⽇.log⽂件,登录信息的⽇志打印到⼀个login.log⽂件中,login-年⽉⽇.log。

2、maven配置<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>test</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.6</version></dependency></dependencies></project>3、配置⽂件 默认情况下,log4j会解析src/main/resources/log4j.properties⽂件,下⾯是log4.properties⽂件中的内容。

springboot的logback.xml配置和日志记录

springboot的logback.xml配置和日志记录

springboot的logback.xml配置和⽇志记录最近在研究springboot的⽇志,所以记录⼀下,做⼀下总结。

⼏篇关于⽇志的⽂章:介绍⽇志:记录⽇志:⽇志,通常不会在需求阶段作为⼀个功能单独提出来,也不会在产品⽅案中看到它的细节。

但是,这丝毫不影响它在任何⼀个系统中的重要的地位。

为了保证服务的⾼可⽤,发现问题⼀定要即使,解决问题⼀定要迅速,所以⽣产环境⼀旦出现问题,预警系统就会通过邮件、短信甚⾄电话的⽅式实施多维轰炸模式,确保相关负责⼈不错过每⼀个可能的bug。

预警系统判断疑似bug⼤部分源于⽇志。

⽐如某个微服务接⼝由于各种原因导致频繁调⽤出错,此时调⽤端会捕获这样的异常并打印ERROR级别的⽇志,当该错误⽇志达到⼀定次数出现的时候,就会触发报警。

try {调⽤某服务} catch(Exception e) {LOG.error("错误信息", e);}所以⽇志⾄关重要,这篇就来介绍下在Spring Boot如何配置⽇志。

Spring Boot默认⽇志系统Spring Boot默认使⽤LogBack⽇志系统,如果不需要更改为其他⽇志系统如Log4j2等,则⽆需多余的配置,LogBack默认将⽇志打印到控制台上。

1、如果要使⽤LogBack,原则上是需要添加dependency依赖的<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>但是因为新建的Spring Boot项⽬⼀般都会引⽤spring-boot-starter或者spring-boot-starter-web,⽽这两个起步依赖中都已经包含了对于spring-boot-starter-logging的依赖,所以,⽆需额外添加依赖,配置logback-spring.xml就可以了。

loback使用文档

loback使用文档

loback使⽤⽂档1.Logback概念⽇志记录⽅式有很多种,我们最常⽤⽿熟能详的如log4j,他可以和common-logging 或slf4j结合使⽤,但今天我们要讲的是另外⼀种更加优秀的⽇志记录⽅法:logback+slf4j。

下⾯介绍⼏个概念:1、slf4j 是简单⽇志门⾯(Simple Logging Facade for Java),不是具体的⽇志解决⽅案,它只服务于各种各样的⽇志系统,是⼀种实现⽇志打印的接⼝没有具体实现⽅法,需要跟其他⽇志组件配合使⽤。

2、Logback是由log4j创始⼈设计的⼜⼀个开源⽇志组件。

logback当前分成三个模块:logback-core,logback- classic和logback-access。

logback-core是其它两个模块的基础模块。

logback-classic是log4j的⼀个改良版本。

此外logback-classic完整实现SLF4JAPI使你可以很⽅便地更换成其它⽇志系统如log4j或JDK14 Logging。

logback-access访问模块与Servlet容器集成提供通过Http来访问⽇志的功能。

3、现在很多⽇志组件可以和slf4j结合使⽤,如下图4.4.2.8.7.1-1下⾯我们总结⼀下logback和log4j对⽐优缺点如下表:1.实现⽅法实现slf4j和logback结合⾮常简单,如下⼏个步骤:1)将slf4j-api-1.7.5.jar , logback-core-1.0.9.jar和logback-classic.jar 放⼊⼯程中。

2)如果是替换原来的⽇志,这⾥分两种情况,①如果是替换掉原来的⽇志记录⽅式如log4j+common-logging或是jdklogging并完成平滑过渡则还需要jcl-over-slf4j-1.6.1.jar ,log4j-over-slf4j-1.6.1.jar 这两个jar包放⼊⼯程中(将有关log4j的jar包从⼯程的classpath中移除),如果是替换掉原来jdk logging 则还需要jul-to-slf4j.jar ,类中创建Logger地⽅,不⽤修改,同时SLF4J就会⾃动选择使⽤你加⼊的那种⽇志系统。

DRUID连接池的实用配置详解

DRUID连接池的实用配置详解

DRUID连接池的实⽤配置详解DRUID介绍DRUID是阿⾥巴巴开源平台上⼀个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加⼊了⽇志监控,可以很好的监控DB池连接和SQL的执⾏情况,可以说是针对监控⽽⽣的DB连接池(据说是⽬前最好的连接池,不知道速度有没有BoneCP快)。

配置参数和其它连接池⼀样DRUID的DataSource类为:com.alibaba.druid.pool.DruidDataSource,基本配置参数如下:配置缺省值说明name配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。

如果没有配置,将会⽣成⼀个名字,格式是:"DataSource-" + System.identityHashCode(this)jdbcUrl 连接数据库的url,不同数据库不⼀样。

例如:mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnautousername连接数据库的⽤户名password连接数据库的密码。

如果你不希望密码直接写在配置⽂件中,可以使⽤ConfigFilter。

详细看这⾥:https:///alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilterdriverClassName根据url⾃动识别这⼀项可配可不配,如果不配置druid会根据url⾃动识别dbType,然后选择相应的driverClassName(建议配置下)initialSize0初始化时建⽴物理连接的个数。

初始化发⽣在显⽰调⽤init⽅法,或者第⼀次getConnection时maxActive8最⼤连接池数量maxIdle8已经不再使⽤,配置了也没效果minIdle最⼩连接池数量maxWait获取连接时最⼤等待时间,单位毫秒。

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

1.参考文献:1.Apache Commons-logging使用实例2.Apache Log4j配置说明3.log4j.properties配置详解mons-logging结合Log4j的问题5.Properties文件相关6.Apache通用日志工具commons-logging和Log4j使用总结mons-Loggin简介Apache针对不同的语言平台为做了一系列日志工具包,可应用于java、.net、php、c++,这些日志包都是免费的,使用非常方便,可以极大提高编程效率。

并且,Apache为了让众多的日志工具有一个相同操作方式,还实现做了一个通用日志工具包:commons-logging,也称Jakarta Commons Logging (JCL)。

commons-logging是为那些需要建立在不同环境下使用不同日志架构的组件或库的开发者创建的,其中包括Apache Log4j以及Java log的日志架构。

把日志信息commons-logging的Log接口,并由commons-logging在运行时决定使用哪种日志架构。

现在,Apache通用日志工具commons-logging和Log4j已经成为Java日志的标准工具。

3.快速入门JCL有两个基本的抽象类:Log(基本记录器)和LogFactory(负责创建Log实例)。

当commons-logging.jar被加入到CLASSPATH(通常将commons-logging.jar放在web project下的WebContent\WEB-INF\lib目录中)之后,它会合理地猜测你想用的日志工具,然后进行自我设置,用户根本不需要做任何设置。

默认的LogFactory是按照下列的步骤去发现并决定那个日志工具将被使用的(按照顺序,寻找过程会在找到第一个工具时中止,这个顺序非常重要):1.寻找当前factory中名叫mons.logging.Log配置属性的值2.寻找系统中属性中名叫mons.logging.Log的值3.如果应用程序的classpath中有log4j,则使用相关的包装(wrapper)类(Log4JLogger)4.如果应用程序运行在jdk1.4的系统中,使用相关的包装类(Jdk14Logger)5.使用简易日志包装类(SimpleLog)上述的加载顺序可以通过commons-logging中LogSource.java的源代码可以看出,源代码如下,具体可以参考注释:package log.sample;public class ca {static {// Is Log4J Available?用户Log4J是否可用try {/*** 通过Class.forName("org.apache.log4j.Logger"))来查找Log4J,* 只有将log4j.jar添加到classpath以后才能找到,* 这也是为什么默认情况下只要将log4j.jar文件放在lib文件夹中* 而不需要在common-logging.properties配置文件中进行配置就能自动使用log4j的原因*/if (null != Class.forName("org.apache.log4j.Logger")) {log4jIsAvailable = true;} else {log4jIsAvailable = false;}} catch (Throwable t) {log4jIsAvailable = false;}// Is JDK 1.4 Logging Available?原来同上面的Log4Jtry {if ((null != Class.forName("java.util.logging.Logger")) &&(null !=Class.forName("mons.logging.impl.Jdk14Logger"))) {jdk14IsAvailable = true;} else {jdk14IsAvailable = false;}} catch (Throwable t) {jdk14IsAvailable = false;}// Set the default Log implementation,通过common-logging.properties 配置文件来决定日志实现方式String name = null;try {name = System.getProperty("mons.logging.log");if (name == null) {name = System.getProperty("mons.logging.Log"); }} catch (Throwable t) {}if (name != null) {try {setLogImplementation(name);} catch (Throwable t) {try {setLogImplementation("mons.logging.impl.NoOpLog");} catch (Throwable u) {;}}} else {try {if (log4jIsAvailable) {//如果log4j可用,默认优先使用Log4JLogger setLogImplementation("mons.logging.impl.Log4JLogger");} else if (jdk14IsAvailable) {//第二优先使用Jdk14LoggersetLogImplementation("mons.logging.impl.Jdk14Logger");} else{//最后使用commoms-logging中的自带的实现,但它不进行任何操作 setLogImplementation("mons.logging.impl.NoOpLog");}} catch (Throwable t) {try {setLogImplementation("mons.logging.impl.NoOpLog");} catch (Throwable u) {;}}}}}mons.logging.Log的具体实现大致有如下几类:∙mons.logging.impl.Jdk14Logger:使用JDK1.4。

∙mons.logging.impl.Log4JLogger:使用Log4J。

∙mons.logging.impl.Log4JCategoryLog:使用Log4J,该实现已被弃用,推荐使用Log4JLogger∙mons.logging.impl.LogKitLogger:使用 avalon-Logkit。

∙mons.logging.impl.SimpleLog:common-logging自带日志实现类。

它实现了Log接口,把日志消息都输出到系统错误流System.err 中。

∙mons.logging.impl.NoOpLog:common-logging自带日志实现类。

它实现了Log接口。

其输出日志的方法中不进行任何操作。

4.信息级别确保日志信息在内容上和反应问题的严重程度上的恰当,是非常重要的。

log4j主要有如下的信息级别:1.fatal:非常严重的错误,导致系统中止。

期望这类信息能立即显示在状态控制台上。

2.error:其它运行期错误或不是预期的条件。

期望这类信息能立即显示在状态控制台上。

3.warn:使用了不赞成使用的API、非常拙劣使用API, '几乎就是'错误, 其它运行时不合需要和不合预期的状态但还没必要称为 "错误"。

期望这类信息能立即显示在状态控制台上。

:运行时产生的有意义的事件。

期望这类信息能立即显示在状态控制台上。

5.debug:系统流程中的细节信息。

期望这类信息仅被写入log文件中。

6.trace:更加细节的信息。

期望这类信息仅被写入log文件中。

通常情况下,我们希望将info级别以上的日志信息输出到控制台,而debug级别以上的信息写入到log文件中,而error信息写入到一个单独的文件中去,下面我们的实例将会实现这样的功能。

4.使用commons-logging结合log4j进行开发4.1. 下载必要的jar包下载commons-logging.jar和log4j.jar包,然后把它们放到工程的lib目录下,引入工程中。

4.2. 编写common-logging.properties配置文件在属性文件common-logging.properties中设置实现接口的类。

如下(这里设置Log4j为所使用的日志包):mons.logging.Log=mons.logging.impl.Log4JLogger这里需要注意的是,如果common-logging.properties配置使用Log4JCategoryLog,会报错误,具体见参考文献4。

配置如下:mons.logging.Log=mons.logging.impl.Log4JCategory Log在第三节中我们讲到如何在项目中引入了log4j.jar,那么common-logging默认会使用log4j最为日志实现方式。

4.3.log4j.properties配置实现日志的不同输出形式前面我们讲到要求在控制台输入info级别的日志,然后有一个log.log记录debug级别以上的日志,一个error.log记录error级别以上的日志。

log4j.properties配置如下:### set log levels ###log4j.rootLogger = debug , stdout , D , E### 输出到控制台 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.out## 输出INFO级别以上的日志log4j.appender.stdout.Threshold = INFOyout = org.apache.log4j.PatternLayoutyout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L- %m%n### 输出到日志文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = D:/logs/log.loglog4j.appender.D.Append = true## 输出DEBUG级别以上的日志log4j.appender.D.Threshold = DEBUGyout = org.apache.log4j.PatternLayoutyout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 保存异常信息到单独文件 ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppender## 异常日志文件名log4j.appender.E.File = D:/logs/error.loglog4j.appender.E.Append = true## 只输出ERROR级别以上的日志!!!log4j.appender.E.Threshold = ERRORyout = org.apache.log4j.PatternLayoutyout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n4.4.单独使用log4j实例:Log4jTest.javapackage log.sample;import org.apache.log4j.Logger;public class Log4jTest {private static Logger log = Logger.getLogger(Log4jTest.class);public void log() {log.debug("Debug info.");("Info info");log.warn("Warn info");log.error("Error info");log.fatal("Fatal info");}public static void main(String[] args) {Log4jTest test = new Log4jTest();test.log();}}mon-logging结合log4j实例:JCLTest.javapackage log.sample;import mons.logging.Log;import mons.logging.LogFactory;public class JCLTest {private static Log log = LogFactory.getLog(JCLTest.class);public void log(){log.debug("Debug info.");("Info info");log.warn("Warn info");log.error("Error info");log.fatal("Fatal info");}public static void main(String[] args) {JCLTest test = new JCLTest();test.log();}}。

相关文档
最新文档