Java常用框架精讲4一文搞懂logback系统日志工具(附
Hello,大家好。这里是老K分享的全网最完整的Java系列教程。
程序员的维护调试都离不开系统日志,常用的系统日志工具包有log4j和logback。
本期我们分享的是logback这个工具包。
不过,logback和log4j之间有着千丝万缕的联系,这点我们之后再讲。
这次先来看看logback。
一、准备工作1。pom。xml
在IDEA中新建maven项目后,第一步就是配置pom文件,我们这里主要展示需要导入的依赖,maven的其它配置可以参考我之前的文章,此处有传送门:《Java项目工程管理神器,构建框架必用Java常用框架精讲(二)》
dependenciesdependencygroupIdorg。mybatisgroupIdmybatisartifactIdversion3。5。1versiondependencydependencygroupIdmysqlgroupIdmysqlconnectorjavaartifactIdversion5。1。47versiondependencydependencygroupIdjunitgroupIdjunitartifactIdversion4。12versiondependencydependencygroupIdch。qos。logbackgroupIdlogbackclassicartifactIdversion1。4。5versiondependencydependenciesmybatis就是一个持久层框架,用来简化调用数据库数据的流程,也是本次demo的应用场景;mysqlconnectorjava是mysql对应java的接口,是java调用mysql所必须的依赖;junit是最常用的测试框架,在测试用例中运行代码是一个成熟的习惯;logbackclassic是logback工具包中的核心包,也是我们今天介绍的主要内容。2。配置MyBatis
本次实战demo,我们会基于Mybatis的应用场景,所以我们需要配置一些关于MyBatis的设置:
关于MyBatis相关的知识,本例只是点到为止,要了解Mybatis系统知识的或对本例中MyBatis有不理解的,可以移步到我直接介绍MyBatis的文章:《MyBatis精讲(一)MyBatis基础配置及持久层连接创建代码实战)》
配置mybatisconfig。xml:lt;?xmlversion1。0encodingutf8?!DOCTYPEconfigurationPUBLICmybatis。orgDTDConfig3。0ENhttps:mybatis。orgdtdmybatis3config。dtdconfigurationsettingssettingnamemapUnderscoreToCamelCasevalueTruesettingsenvironmentsdefaultdevenvironmentiddevtransactionManagertypeJDBCtransactionManagerdataSourcetypePOOLEDpropertynamedrivervaluecom。mysql。jdbc。Driverpropertynameurlvaluejdbc:mysql:localhost:3306javasql?useUnicodetruecharacterEncodingutf8propertynameusernamevaluerootpropertynamepasswordvalue123456dataSourceenvironmentenvironmentsconfiguration上述内容为mybatis的基本配置,存储路径和各个标签的意义就不赘述了,有需要的可以到我之前写的文章查看。3。创建数据库
这个步骤不一定要和我的内容一致,但为了达到比较好的演示效果,大家可以在自己的数据库中导入以下sql语句:DROPTABLEIFEXISTSemployee;CREATETABLEemployee(idintUNSIGNEDNOTNULLAUTOINCREMENT,namevarchar(255)CHARACTERSETutf8mb4COLLATEutf8mb40900aiciNOTNULL,departvarchar(255)CHARACTERSETutf8mb4COLLATEutf8mb40900aiciNOTNULL,salarydecimal(10,2)NOTNULL,ageintNOTNULL,PRIMARYKEY(id)USINGBTREE)ENGINEInnoDBCHARACTERSETutf8mb4COLLATEutf8mb40900aiciROWFORMATDynamic;DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(didintUNSIGNEDNOTNULLAUTOINCREMENT,departvarchar(255)CHARACTERSETutf8mb4COLLATEutf8mb40900aiciNULLDEFAULTNULL,memberintNULLDEFAULTNULL,PRIMARYKEY(did)USINGBTREE)ENGINEInnoDBCHARACTERSETutf8mb4COLLATEutf8mb40900aiciROWFORMATDynamic;INSERTINTOemployeeVALUES(5001,赵乾,销售部,6000。00,28);INSERTINTOemployeeVALUES(5002,孙礼,销售部,7000。00,34);INSERTINTOemployeeVALUES(6001,周武,技术部,6500。00,27);INSERTINTOemployeeVALUES(6002,郑望,技术部,7500。00,40);INSERTINTOdepartmentVALUES(1,销售部,5);INSERTINTOdepartmentVALUES(2,技术部,6);4。编写测试用例
最后一步是编写测试用例,一般是放置在。testjava路径下。importorg。apache。ibatis。io。Resources;importorg。apache。ibatis。session。SqlSession;importorg。apache。ibatis。session。SqlSessionFactory;importorg。apache。ibatis。session。SqlSessionFactoryBuilder;importorg。junit。Test;importjava。io。IOException;importjava。io。Reader;importjava。sql。Connection;importjava。sql。PreparedStatement;importjava。sql。ResultSet;publicclassMyBatisTest{TestpublicvoidtestSelect()throwsIOException{ReaderreaderResources。getResourceAsReader(mybatisconfig。xml);SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder()。build(reader);SqlSessionsqlSessionnull;try{sqlSessionsqlSessionFactory。openSession();ConnectionconnectionsqlSession。getConnection();Stringsqlselectfromemployeeorderbyiddesclimit10;PreparedStatementstmtconnection。prepareStatement(sql);ResultSetrsstmt。executeQuery();while(rs。next()){System。out。println(rs。getString(name));}}catch(Exceptione){e。printStackTrace();}finally{if(sqlSession!null){sqlSession。close();}}}}上述测试用例代码,是MyBatis工具的标准写法,没有展开介绍的知识点,有需要可以翻看之前的文章,相关链接:《MyBatis精讲(一)MyBatis基础配置及持久层连接创建代码实战)》二、第一次尝试1。MyBatis的默认日志
有了上述的准备,我们并且在pom。xml里配置好logback依赖,这时候运行测试用例,就能看到logging日志在console里输出了,内容如下:17:26:02。931〔main〕DEBUGorg。apache。ibatis。logging。LogFactoryLogginginitializedusingclassorg。apache。ibatis。logging。slf4j。Slf4jImpladapter。17:26:02。936〔main〕DEBUGorg。apache。ibatis。datasource。pooled。PooledDataSourcePooledDataSourceforcefullyclosedremovedallconnections。17:26:02。936〔main〕DEBUGorg。apache。ibatis。datasource。pooled。PooledDataSourcePooledDataSourceforcefullyclosedremovedallconnections。17:26:02。936〔main〕DEBUGorg。apache。ibatis。datasource。pooled。PooledDataSourcePooledDataSourceforcefullyclosedremovedallconnections。17:26:02。936〔main〕DEBUGorg。apache。ibatis。datasource。pooled。PooledDataSourcePooledDataSourceforcefullyclosedremovedallconnections。17:26:02。970〔main〕DEBUGorg。apache。ibatis。transaction。jdbc。JdbcTransactionOpeningJDBCConnectionSatDec0317:26:03CST2022WARN:EstablishingSSLconnectionwithoutserversidentityverificationisnotrecommended。AccordingtoMySQL5。5。45,5。6。26and5。7。6requirementsSSLconnectionmustbeestablishedbydefaultifexplicitoptionisntset。ForcompliancewithexistingapplicationsnotusingSSLtheverifyServerCertificatepropertyissettofalse。YouneedeithertoexplicitlydisableSSLbysettinguseSSLfalse,orsetuseSSLtrueandprovidetruststoreforservercertificateverification。17:26:03。371〔main〕DEBUGorg。apache。ibatis。datasource。pooled。PooledDataSourceCreatedconnection1497845528。17:26:03。371〔main〕DEBUGorg。apache。ibatis。transaction。jdbc。JdbcTransactionSettingautocommittofalseonJDBCConnection〔com。mysql。jdbc。JDBC4Connection59474f18〕郑望周武孙礼赵乾17:26:03。378〔main〕DEBUGorg。apache。ibatis。transaction。jdbc。JdbcTransactionResettingautocommittotrueonJDBCConnection〔com。mysql。jdbc。JDBC4Connection59474f18〕17:26:03。378〔main〕DEBUGorg。apache。ibatis。transaction。jdbc。JdbcTransactionClosingJDBCConnection〔com。mysql。jdbc。JDBC4Connection59474f18〕17:26:03。378〔main〕DEBUGorg。apache。ibatis。datasource。pooled。PooledDataSourceReturnedconnection1497845528topool。2。自定义日志格式
以上是MyBatis运行后的默认日志格式,如果有需要调整日志格式,可以通过在。srcmainresources路径下新建logback。xml后进行设置。
以下是标准化配置代码:lt;?xmlversion1。0encodingUTF8?configurationencoderpatternd{yyyyMMdd}〔thread〕3levellogger{12}msgnpatternencoderappenderrootleveldebugrootconfiguration、是标准化标签,不作介绍了;是输出源设置,其子标签是设置编码信息,就是用来设置日志格式模板的;就是用来设置日志格式模板的,模板语法会在后续内容中介绍;中的level是用来设置输出级别的,后续也会进行介绍;中用来设置日志的输出源,需要与标签中的name属性对应。
配置好上述xml文件,再次输出日志,结果就会变成这样:20221203〔main〕DEBUGo。a。i。l。LogFactoryLogginginitializedusingclassorg。apache。ibatis。logging。slf4j。Slf4jImpladapter。20221203〔main〕DEBUGo。a。i。d。p。PooledDataSourcePooledDataSourceforcefullyclosedremovedallconnections。20221203〔main〕DEBUGo。a。i。d。p。PooledDataSourcePooledDataSourceforcefullyclosedremovedallconnections。20221203〔main〕DEBUGo。a。i。d。p。PooledDataSourcePooledDataSourceforcefullyclosedremovedallconnections。20221203〔main〕DEBUGo。a。i。d。p。PooledDataSourcePooledDataSourceforcefullyclosedremovedallconnections。20221203〔main〕DEBUGo。a。i。t。j。JdbcTransactionOpeningJDBCConnectionSatDec0317:39:08CST2022WARN:EstablishingSSLconnectionwithoutserversidentityverificationisnotrecommended。AccordingtoMySQL5。5。45,5。6。26and5。7。6requirementsSSLconnectionmustbeestablishedbydefaultifexplicitoptionisntset。ForcompliancewithexistingapplicationsnotusingSSLtheverifyServerCertificatepropertyissettofalse。YouneedeithertoexplicitlydisableSSLbysettinguseSSLfalse,orsetuseSSLtrueandprovidetruststoreforservercertificateverification。20221203〔main〕DEBUGo。a。i。d。p。PooledDataSourceCreatedconnection1431467659。20221203〔main〕DEBUGo。a。i。t。j。JdbcTransactionSettingautocommittofalseonJDBCConnection〔com。mysql。jdbc。JDBC4Connection5552768b〕郑望周武孙礼赵乾20221203〔main〕DEBUGo。a。i。t。j。JdbcTransactionResettingautocommittotrueonJDBCConnection〔com。mysql。jdbc。JDBC4Connection5552768b〕20221203〔main〕DEBUGo。a。i。t。j。JdbcTransactionClosingJDBCConnection〔com。mysql。jdbc。JDBC4Connection5552768b〕20221203〔main〕DEBUGo。a。i。d。p。PooledDataSourceReturnedconnection1431467659topool。
经过上述设置,日志开头变成了日期,而执行位置logger被裁剪了,父目录用首字母表示了。3。模板语法
基础语法是command{parameter}。变量是通过加命令符的格式实现的;通过在变量名后面添加{}加参数的形式,设置变量的表现现实;{}和参数不是必须的。
以上例中的语法为例,对其变量进行说明:
d{yyyyMMdd}〔thread〕5levellogger{12}msgn
命令符
输出内容
说明
d
日期时间
可以设置时间格式:y年、M月、d日、H时、m分、s秒、S毫秒等
thread
当前线程
反应当前所在线程
5level
设置输出级别
此处5表示对其格式为5字符。输出级别有:error错误、warn警报、info信息、debug调试、trace追踪,优先级从高到低。
logger
代码执行位置
反应当前语句所在文件路径,参数中的数字是输出字符串长度上限,超过上限则父目录名以首字母表示
msg
日志内容
n
换行符
三、调用lagback
以上是在利用MyBatis默认配置,输出log日志的效果,下面我们提供一个demo,教你如何编写自己的日志内容:importorg。slf4j。Logger;importorg。slf4j。LoggerFactory;publicclassLogbackTest{publicstaticvoidmain(String〔〕args){LoggerloggerLoggerFactory。getLogger(LogbackTest。class);logger。info(HelloWorld);}}slf4j是logback的依赖,maven配置好logback后,会自动下载安装slf4j;Logger是日志输出实例,可以由LoggerFactory生成;通过调用Logger的info方法,可以输出INFO级别的日志;除了info,Logger还有error、warn、debug、trace等方法,可以调用相应级别的输出;
上述代码运行后得到的结果是:20221203〔main〕INFOLogbackTestHelloWorld
您可以参考上例实例化一个Logger,然后在你程序需要的位置,通过logger的API方法输出指定级别的日志。
以上,就是我们的常用系统日志工具logback的全部内容了。
本期的内容较多,建议可以收藏这篇文章,多读几遍慢慢消化。
如果你对老K分享的内容有任何疑问,欢迎随时在评论区留言或者私信我。
正在学习的小伙伴记得给老K一个赞哦,你的支持是我持续输出课程内容最大的动力!
阅读推荐
我也分享过其他关于如何学习Java的文章,有需要的小伙伴可以点击下方链接获取:
《IT大佬推荐!学习Java的最优路径分享多个阶段的学习资源建议收藏》结束语
我是专注于开发领域的老K玩代码,会持续生产关于如何学习编程语言的优质内容。
如果你想学习Java编程,或者想精进你的Java编程能力,可以关注我。
如果你对开发、编程有任何疑问或者有想了解的内容,而我暂时没有写到的,也欢迎随时来找我聊聊。
头条创作挑战赛