Java 项目日志实例:综合应用

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~

本文介绍 JCL(java common logging) 和 SLF4J 分别与 Log4j 结合使用的示例。

1

JCL + Log4j 使用示例

463cf2abea22b40f5e23df6c67f978b1.png

1、JCL(java common logging) + Log4j 介绍

使用 commons-logging 的 Log 接口,并由 commons-logging 在运行时决定使用哪种日志架构(如 Log4j)。现在,Apache 通用日志工具 commons-logging 和 Log4j 已经成为 Java 日志的标准工具,这个组合是比较常用的一个日志框架组合。

2、JCL(java common logging) + Log4j 使用步骤说明

(1)选择jar包

引入必要的包:commons-logging-1.2.jar 、log4j1.2.17.jar。

(2)pom.xml 配置

<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version>
</dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>

(3)common-logging.properties 配置文件

只需要一行即可,放在 classpath 下,如果是 Maven 中就在 src/resources 下,不过如果没有 common-logging.properties 文件,但是 src 下有 log4j.properties 配置也可以正常的输出 Log4j 设置的日志。

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

(4)log4j.properties 配置文件

#配置根Logger
#改代码表示输输出info级别以上的日志,文件分别输出,一个是file,一个是errorlog4j.rootLogger=info,file,error 
#配置file日志信息输出目的地Appender
#定义名为file的输出端是每天产生一个日志文件log4j.appender.file=org.apache.log4j.DailyRollingFileAppender    #指定日志信息的最低输出级别位INFO,默认为DEBUG。log4j.appender.file.Threshold=INFO    #指定当前消息输出到jpm/log4j/log.log文件中log4j.appender.file.File=/jpm/log4j/log.log    #指定按天来滚动日志文件log4j.appender.file.DatePattern=yyyy-MM-dd    #配置日志信息的格式(布局)Layout是可以灵活地指定布局模式log4j.appender.file.layout=org.apache.log4j.PatternLayout    #格式化日志,Log4j采用类似C语言中的printf函数的打印格式格式化日志信息log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-ddHH:mm:ss}][%-5p][jpm-%c{1}-%M(%L)]-%m%n    #指定输出信息的编码log4j.appender.file.encoding=UTF-8
#配置error日志信息输出目的地Appender
#定义名为error的输出端是每天产生一个日志文件log4j.appender.error=org.apache.log4j.DailyRollingFileAppender    #指定日志信息的最低输出级别位ERROR,默认为DEBUG。log4j.appender.error.Threshold=ERROR    #指定当前消息输出到jpm/log4j/error.log文件中log4j.appender.error.File=/jpm/log4j/error.log    #指定按月来滚动日志文件log4j.appender.error.DatePattern=yyyy-MM    #配置日志信息的格式(布局)Layout是可以灵活地指定布局模式log4j.appender.error.layout=org.apache.log4j.PatternLayout    #格式化日志,Log4j采用类似C语言中的printf函数的打印格式格式化日志信息log4j.appender.error.layout.ConversionPattern=[%d{yyyy-MM-ddHH:mm:ss}][%-5p][jpm-%c{1}-%M(%L)]-%m%n    #指定输出信息的编码log4j.appender.error.encoding=UTF-8
#使某个功能的日志单独输出到指定的日志文件log4j.logger.saveUserLog=INFO,saveUserLog    #该配置就是让job的日志只输出到自己指定的日志文件中,表示Logger不会在父Logger的appender里输出,默认为true。log4j.additivity.saveUserLog=falselog4j.appender.saveUserLog=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.saveUserLog.File=/jpm/log4j/saveUserLog.loglog4j.appender.saveUserLog.DatePattern=yyyy-MM-ddlog4j.appender.saveUserLog.Append=truelog4j.appender.saveUserLog.layout=org.apache.log4j.PatternLayoutlog4j.appender.saveUserLog.layout.ConversionPattern=%m%nlog4j.appender.error.encoding=UTF-8

(5)输出日志的代码示例

package jpm.jcllog4j;    
import org.apache.commons.logging.Log;    
import org.apache.commons.logging.LogFactory;    
public class TestJclAndLog4j {        
public static void main(String[] args) {            final Log LOGGER = LogFactory.getLog(TestJclAndLog4j.class);LOGGER.debug("TestJclAndLog4j debug log.");LOGGER.info("TestJclAndLog4j info log.");LOGGER.error("TestJclAndLog4j error log.");}
}

(6)打印日志结果

d75752254dc4f8cd37551f24e5da0a6f.png

c67ee583aca2fdad9783d5da62569947.jpeg

2

SLF4J + Log4j 使用示例

417674264dc469d4c180dafac86aa50a.png

1、SLF4J + Log4j 介绍

SLF4j+Log4j 与 JCL+Log4J 的使用方式差不多,主要差异就在 SLF4J 用 用绑定包(slf4j-Log4j12.jar)来告知用哪种日志实现,而 JCL 是通过配置文件来获得该选择哪个日志实现。

2、SLF4J + Log4j使用步骤说明

(1)选择jar包

引入必要的包:slf4j-api.jar 、slf4j-log4j12.jar。

(2)pom.xml 配置

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version>
</dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version>
</dependency>

(3)log4j.properties 配置文件

#配置根Logger
#改代码表示输输出info级别以上的日志,文件分别输出,一个是file,一个是errorlog4j.rootLogger=info,file,error 
#配置file日志信息输出目的地Appender
#定义名为file的输出端是每天产生一个日志文件log4j.appender.file=org.apache.log4j.DailyRollingFileAppender    #指定日志信息的最低输出级别位INFO,默认为DEBUG。log4j.appender.file.Threshold=INFO    #指定当前消息输出到jpm/log4j/log.log文件中log4j.appender.file.File=/jpm/log4j/log.log    #指定按天来滚动日志文件log4j.appender.file.DatePattern=yyyy-MM-dd    #配置日志信息的格式(布局)Layout是可以灵活地指定布局模式log4j.appender.file.layout=org.apache.log4j.PatternLayout    #格式化日志,Log4j采用类似C语言中的printf函数的打印格式格式化日志信息log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-ddHH:mm:ss}][%-5p][jpm-%c{1}-%M(%L)]-%m%n    #指定输出信息的编码log4j.appender.file.encoding=UTF-8
#配置error日志信息输出目的地Appender
#定义名为error的输出端是每天产生一个日志文件log4j.appender.error=org.apache.log4j.DailyRollingFileAppender    #指定日志信息的最低输出级别位ERROR,默认为DEBUG。log4j.appender.error.Threshold=ERROR    #指定当前消息输出到jpm/log4j/error.log文件中log4j.appender.error.File=/jpm/log4j/error.log    #指定按月来滚动日志文件log4j.appender.error.DatePattern=yyyy-MM    #配置日志信息的格式(布局)Layout是可以灵活地指定布局模式log4j.appender.error.layout=org.apache.log4j.PatternLayout    #格式化日志,Log4j采用类似C语言中的printf函数的打印格式格式化日志信息log4j.appender.error.layout.ConversionPattern=[%d{yyyy-MM-ddHH:mm:ss}][%-5p][jpm-%c{1}-%M(%L)]-%m%n    #指定输出信息的编码log4j.appender.error.encoding=UTF-8
#使某个功能的日志单独输出到指定的日志文件log4j.logger.saveUserLog=INFO,saveUserLog    #该配置就是让job的日志只输出到自己指定的日志文件中,表示Logger不会在父Logger的appender里输出,默认为true。log4j.additivity.saveUserLog=falselog4j.appender.saveUserLog=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.saveUserLog.File=/jpm/log4j/saveUserLog.loglog4j.appender.saveUserLog.DatePattern=yyyy-MM-ddlog4j.appender.saveUserLog.Append=truelog4j.appender.saveUserLog.layout=org.apache.log4j.PatternLayoutlog4j.appender.saveUserLog.layout.ConversionPattern=%m%nlog4j.appender.error.encoding=UTF-8

(4)输出日志的代码示例

package jpm.slf4jlog4j;    
import org.slf4j.Logger;    
import org.slf4j.LoggerFactory;    
public class TestSlf4jAndLog4j {        public static void main(String[] args) {            final Logger LOGGER = LoggerFactory.getLogger(TestSlf4jAndLog4j.class);LOGGER.debug("TestSlf4jAndLog4j debug log:{}", "debug");LOGGER.info("TestSlf4jAndLog4j info log:{}", "info");LOGGER.error("TestSlf4jAndLog4j error log:{}", "error");}
}

(5)打印日志结果

50d824e9cacc31fb478297d6548d7a8e.png

bc3283cc0f296542a96dda10c8700c42.jpeg

Java 日志处理介绍结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP学习--三层架构

未完成 网关作为了一个广播域的中心出口&#xff1b;生成树的根网桥也是一棵树的中心&#xff0c;也是流量的集合点&#xff1b; 若将两者分配不同的设备将导致网络通讯资源浪费&#xff0c;故强烈建议两者在同一台汇聚层设备上 举个例子 看下图若VLAN2要去找VLAN3设备需要…

数据结构——线性数据结构(数组,链表,栈,队列)

文章目录 1. 数组2. 链表2.1. 链表简介2.2. 链表分类2.2.1. 单链表2.2.2. 循环链表2.2.3. 双向链表2.2.4. 双向循环链表 2.3. 应用场景2.4. 数组 vs 链表 3. 栈3.1. 栈简介3.2. 栈的常见应用常见应用场景3.2.1. 实现浏览器的回退和前进功能3.2.2. 检查符号是否成对出现3.2.3. 反…

docker安装clickhouse

安装 docker安装 创建clickhouse目录 mkdir -P /data/clickhouse/datamkdir -P /data/clickhouse/confmkdir -P /data/clickhouse/log 拉取镜像 这里直接拉取最新镜像, 如果需要某个特定版本, 则再拉取的时候指定版本号即可. docker pull clickhouse/clickhouse-server 启动临…

学习Vue:【性能优化】异步组件和懒加载

在Vue.js应用开发中&#xff0c;性能优化是一个至关重要的主题&#xff0c;而异步组件和懒加载是提升性能的有效方法之一。本文将介绍什么是异步组件和懒加载&#xff0c;以及如何在Vue.js中应用这些技术来提升应用性能。 异步组件和懒加载 异步组件 异步组件是指在需要的时候…

高并发内存池(回收)[4]

threadcache还给centralcache void ThreadCache::Deallocate(void* ptr, size_t size) {assert(ptr);assert(size < MAX_BYTES);// 找对映射的自由链表桶&#xff0c;对象插入进入size_t index SizeClass::Index(size);_freeLists[index].Push(ptr);// 当链表长度大于一次…

软件测试技术之单元测试—工程师 Style 的测试方法(2)

怎么写单元测试&#xff1f; JUnit 简介 基本上每种语言和框架都有不错的单元测试框架和工具&#xff0c;例如 Java 的 JUnit、Scala 的 ScalaTest、Python的 unittest、JavaScript 的 Jest 等。上面的例子都是基于 JUnit 的&#xff0c;我们下面就简单介绍下 JUnit。 JUnit…

光模块兼容性:确保通信系统的互操作性和可靠性

在现代通信系统中&#xff0c;光模块作为重要的传输组件&#xff0c;其兼容性对于确保通信系统的互操作性和可靠性至关重要。光模块的兼容性涉及到多个方面&#xff0c;包括物理接口、协议和性能等。本文将探讨光模块兼容性的重要性以及如何确保光模块在通信系统中的良好兼容性…

深入探讨空间复杂度:前端开发中的关键概念

在前端开发中&#xff0c;我们通常关注时间复杂度和空间复杂度这两个算法概念&#xff0c;用于衡量算法或代码的性能。本文将深入介绍空间复杂度&#xff0c;探讨其在前端开发中的应用&#xff0c;并提供易懂的代码示例。 什么是空间复杂度&#xff1f; 空间复杂度是指算法在…

计算机视觉之三维重建(三)(单视图测量)

2D变换 等距变换 旋转平移保留形状、面积通常描述刚性物体运动 相似变换 在等距变换的基础增加缩放特点 射影变换 共线性、四共线点的交比保持不变 仿射变换 面积比值、平行关系等不变仿射变换是特殊的射影变换 影消点与影消线 2D无穷远点 两直线的交点可由两直线的…

Java 注解计算12生肖,java Data中获取年,根据生日日期获取生肖注解,根据输入时间获取生肖,自定义注解的方式获取生肖 根据年份时间获取十二生肖

最近&#xff0c;开发中需要增加生肖&#xff0c;但是不想增加字段&#xff0c;于是通过注解的方式&#xff0c;实现生日与生肖的转换。 话不多说&#xff0c;直接上代码&#xff0c;如下&#xff1a; 实体类中的字段&#xff0c;添加自定义注解&#xff08;ToChineseZodiacSe…

考研C语言进阶题库——更新51-60题

目录 51.银行系中有很多恒星&#xff0c;H 君晚上无聊&#xff0c;便爬上房顶数星星&#xff0c;H 君将整个银河系看做一个平面&#xff0c;左上角为原点&#xff08;坐标为&#xff08;1, 1&#xff09;&#xff09;。现在有 n 颗星星&#xff0c;他给每颗星星都标上坐标&…

使用 OpenCV Python 实现自动图像注释工具的详细步骤--附完整源码

注释是深度学习项目中最关键的部分。它是模型学习效果的决定因素。然而,这是非常乏味且耗时的。一种解决方案是使用自动图像注释工具,这大大缩短了时间。 本文是pyOpenAnnotate系列的一部分,其中包括以下内容。 1、使用 OpenCV 进行图像注释的路线图。 2、pyOpenAnnotate工…

常见前端面试之VUE面试题汇总二

4. slot 是什么&#xff1f;有什么作用&#xff1f;原理是什么&#xff1f; slot 又名插槽&#xff0c;是 Vue 的内容分发机制&#xff0c;组件内部的模板引擎使用 slot 元素作为承载分发内容的出口。插槽 slot 是子组件的一个模板 标签元素&#xff0c;而这一个标签元素是否显…

Electron学习2 使用Electron-vue和Vuetify UI库

Electron学习2 使用Electron-vue和Vuetify UI库 一、Electron-vue简介二、安装yarn三、创建Electron-vue项目1. 关于 electron-builder2. 安装脚手架3. 运行4. 打包应用程序 四、background.js说明1. 引入模块和依赖&#xff1a;2. 注册协议&#xff1a;3. 创建窗口函数&#x…

Mysql group by使用示例

文章目录 1. groupby时不能查询*2. 查询出的列必须在group by的条件列中3. group by多个字段&#xff0c;这些字段都有索引也会索引失效&#xff0c;只有group by单个字段索引才能起作用4. having条件必须跟group by相关联5. 用group by做去重6. 使用聚合函数做数量统计7. havi…

thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统

thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统 1、做题界面 2、前端UI的展示 3、带商城购物功能

【Redis从头学-8】Redis中的ZSet数据类型实战场景之用户积分榜

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…

大数据 算法

什么是大数据 大数据是指数据量巨大、类型繁多、处理速度快的数据集合。这些数据集合通常包括结构化数据&#xff08;如数据库中的表格数据&#xff09;、半结构化数据&#xff08;如XML文件&#xff09;和非结构化数据&#xff08;如文本、音频和视频文件&#xff09;。大数据…

Hadoop小结(上)

最近在学大模型的分布式训练和存储&#xff0c;自己的分布式相关基础比较薄弱&#xff0c;基于深度学习的一切架构皆来源于传统&#xff0c;我总结了之前大数据的分布式解决方案即Hadoop&#xff1a; Why Hadoop Hadoop 的作用非常简单&#xff0c;就是在多计算机集群环境中营…

页面禁用鼠标右键,禁用F12打开开发者工具!!!

文章目录 问题分析方法一方法二方法二问题 今天在浏览博主文章时发现无法复制页面上的内容,也无法F12打开开发者工具,更用不了鼠标右键,于是上网找了原因并亲测可用 分析 方法一 将 <body> 改成 <body oncontextmenu=self.event.returnValue=false>方法二 …