spring集成 log4j + slf4j

以maven web项目为例,

首先、在pom文件引入相关依赖,如下(spring官网文档有介绍):

复制代码
<dependencies><!-- spring 相关 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.0.2.RELEASE</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.5.8</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.5.8</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.5.8</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency>
</dependencies>
复制代码

spring 内部默认使用的日志框架是: commons-logging(需排除该依赖), 引入“jcl-over-slf4j”依赖,使spring对common-logging的调用转为对slf4j的调用

需要注意的是: 排除commons-logging依赖后,若不配置其他替代依赖(jcl-over-slf4j),容器初始化时会报错:java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

 

接着编写log4j配置文件log4j.xml,位于classpath路径下(src/main/resources)

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><!-- Appenders --><appender name="FILE" class="org.apache.log4j.RollingFileAppender"><param name="file" value="${project.home}/logs/dispatchmanage.log" /><param name="append" value="true" /><param name="maxFileSize" value="100MB" /><param name="maxBackupIndex" value="10" /><layout class="org.apache.log4j.PatternLayout"><param name='ConversionPattern' value='[%-5p][%d{yyyy/MM/dd HH:mm:ss}][%l][%m]%n' /></layout></appender><appender name="Console" class="org.apache.log4j.ConsoleAppender"><param name="Target" value="System.out" /><layout class="org.apache.log4j.PatternLayout"><param name='ConversionPattern' value='[%-5p][%d{yyyy/MM/dd HH:mm:ss}][%l][%m]%n' /></layout></appender><!-- Application Loggers --><logger name="com.hgs"><level value="debug" /><appender-ref ref="FILE" /></logger><!-- 3rdparty Loggers --><logger name="org.springframework.core"><level value="info" /></logger><logger name="org.springframework.beans"><level value="info" /></logger><logger name="org.springframework.context"><level value="info" /></logger><logger name="org.springframework.web"><level value="info" /></logger><!-- SQL Loggers --><logger name="java.sql.Statement" additivity="true"> <level value="debug" /> </logger> <logger name="java.sql.PreparedStatement" additivity="true"> <level value="debug" /> </logger> <logger name="com.ibatis"><level value="info" /></logger><logger name="com.ibatis.common.jdbc"><level value="info" /></logger><logger name="com.ibatis.sqlmap.engine.impl"><level value="info" /></logger><logger name="java.sql.Connection"><level value="info" /></logger><!-- Root Logger --><root><level value="debug" /><appender-ref ref="Console" /></root></log4j:configuration>
复制代码

 

到此所有的配置工作就完成了,紧接着就可以在实际代码中编程使用了,如下:

复制代码
package com.yinz.tool.quartz.test;import java.util.Date;import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** * @description:调度任务要执行的具体操作,* 该类必须要有一个无参构造器 * @author yinz* 2016-7-7*/
public class SimpleJob implements Job {private Logger logger = LoggerFactory.getLogger(SimpleJob.class);public void execute(JobExecutionContext context) throws JobExecutionException {//JobDataMap dataMap = context.getJobDetail().getJobDataMap(); //JobDetail中的JobDataMapJobDataMap dataMap = context.getMergedJobDataMap();  //trigger和JobDetail的中的JobDataMap的合并String jobMsg = dataMap.getString("jobMsg");String triggerMsg = dataMap.getString("triggerMsg");logger.info(new Date() + " :  < " + jobMsg + " >, < " + triggerMsg + " >" );}}
复制代码

代码中可以看出,我们是面向slf4j 的api编程,这样就可以方便实现在不同的日志框架间切换而不需修改代码。

转载于:https://www.cnblogs.com/yuluoxingkong/p/8004308.html

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

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

相关文章

90后中国程序员“黑吃黑”博彩网站,半年获利256万,判刑11年半

一个90后程序员&#xff0c;在短短两年的时间里&#xff0c;非法控制67万台计算机&#xff0c;还利用漏洞“黑吃黑”博彩网站&#xff0c;半年从中获利256万余元……近期&#xff0c;浙江省杭州市西湖区人民法院对这起黑客大案进行了一审宣判。法院以诈骗罪、非法控制计算机信息…

用一张图片告诉你芯片设计

#推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言嵌入式Linux微信扫描二维码&#xff0c;关注我的公众号

【学习总结】Markdown 使用的正确姿势

参考资料&#xff1a; Learning-Markdown 入门参考 注&#xff1a;原博可能对GitHub中的Markdown格式更适用。ps&#xff1a;在王熊猫的GitHub里也有相关格式的攻略&#xff0c;可一并参考学习。关于表情的cheatsheet ? &#xff08;似乎不太好&#xff0c;哈哈&#xff09;1、…

MTK 平台TP调试遇坑

#前言最近在调试我们项目上的TP驱动&#xff0c;奈何一直不能使用&#xff0c;而且这个项目的硬件确定是没有问题的「这个是前提」&#xff0c;我们在软件上提升了SDK基线&#xff0c;在之前的基线版本上软件是没有问题的。然后我就赶紧检查了两个方面确定TP的供电是不是正常的…

51nod 1379 索函数

Fib[0]0,Fib[1]1,Fib[n]Fib[n-1]Fib[n-2] if n>1. 定义索函数Sor(n)Fib[0]| Fib[1] |Fib[2]|…|Fib[n]. 给定整数n&#xff0c;要求计算Sor(n)%1,000,000,007(1e97). Input第1行&#xff1a;给出一个整数T&#xff0c;表示有T组数据。(1<T<10000) 第2行到T1行&#xf…

昨天小米股价大涨的背后:UWB芯片到底是个什么鬼?

小米10月12日发布了“一指连”小米UWB技术。小米称该技术赋予手机与智能设备空间感知能力&#xff0c;手机指向设备即可定向操控&#xff0c;使小米在“通往未来之路上再迈一步”。来源&#xff1a;腾讯自选股受此消息利好&#xff0c;截止10月12日收盘&#xff0c;小米集团港股…

当你使用微信和QQ的时候,请不要忘记ICQ这个伟大的公司!

距离 ICQ 创立已经 24 年了&#xff0c;仿佛已经跨越了一代人的年纪&#xff0c;而今&#xff0c;我们似乎无法在互联网上找到太多关于 ICQ 的信息。如果有人不知道 ICQ 的话&#xff0c;可以告诉你 ICQ 才是互联网通讯的鼻祖&#xff0c;而不是 QQ、MSN、微信、Facebook。ICQ …

db 是个什么鬼?

最近在处理音频部分的内容&#xff0c;我们讨论一个音频的时候&#xff0c;会谈到声音的大小&#xff0c;就是「分贝」。Decibels,分贝这其中还涉及一个东西&#xff0c;就是放大器&#xff0c;声音经过放大器后&#xff0c;就会变成放大后的声音&#xff0c;这个是硬件放大&am…

原创--DataGrid自动分页例子,通过存储过程

通过存储过程来进行DataGrid自动分页&#xff0c;效率很高&#xff0c;可以进行百万和千万级的分页自己通过50万条记录测试&#xff0c;翻至任何页&#xff0c;需时小于一秒呵呵&#xff0c;仅供自己以后察看使用&#xff0c;所以代码写的不很规范所需的存储过程如下&#xff1…

我看完大连理工研究生的遗书之后

可能是因为年纪大的一丢丢&#xff0c;看到这类新闻会觉得难受&#xff0c;也可能是因为自己也是父亲了&#xff0c;想到这位同学父亲的情况更加受不了。然后回头想想自己这些年的经历&#xff0c;很多次也有过结束生命来解决问题的想法&#xff0c;每次到了最关键的时候&#…

面试官:如何写出让 CPU 跑得更快的代码?

前言代码都是由 CPU 跑起来的&#xff0c;我们代码写的好与坏就决定了 CPU 的执行效率&#xff0c;特别是在编写计算密集型的程序&#xff0c;更要注重 CPU 的执行效率&#xff0c;否则将会大大影响系统性能。CPU 内部嵌入了 CPU Cache&#xff08;高速缓存&#xff09;&#x…

拼音输入法功能大比拼

使用电脑工作或在互联网大潮中冲浪的朋友都离不开输入法的使用&#xff0c;输入法种类繁多&#xff0c;让新接触电脑的朋友目不暇接&#xff0c;难以确定哪一款才是最适合的自己的输入法。 一、拼音走向主流 五笔逐渐衰落尽管目前市场上的输入法种类繁多&#xff0c;各种各样的…

循序渐进PYTHON3(十三) --8-- DJANGO之ADMIN

admin简单使用&#xff1a; 1.urls.py2.settings.py3.models.pyfrom django.db import modelsclassUserInfo(models.Model): uid models.AutoField(primary_keyTrue) user_name models.CharField(max_length30) email models.EmailField() memo models.TextField() img mo…

你见过出道即巅峰吗?

我不知道你们见过没有&#xff0c;反正我见过了。这个消息是我周五上班的时候收到的&#xff0c;这个是一位非电子专业转行嵌入式的同学&#xff0c;之前加我微信后&#xff0c;聊的不是很多&#xff0c;但是非常惊讶的是&#xff0c;刚刚毕业就拿到了一份非常不错的offer。但是…

代码优化导致的奇葩问题

这个是今天在微信群里讨论的一个问题&#xff0c;先看图片点击查看大图代码流程大概是这个样子的点击查看大图查看 length 和 space1 的值&#xff0c;明显看到 length 小于 space1 的值&#xff0c;即使是这样小白都能搞懂流程的情况下&#xff0c;代码还是跑到else里面区执行…

深度:关于Linux内核最硬核的文章

来源 &#xff1a;头条号Linux学习教程&#xff0c;冰凌块儿01前言本文主要讲解什么是Linux内核&#xff0c;以及通过多张图片展示Linux内核的作用与功能&#xff0c;以便于读者能快速理解什么是Linux内核&#xff0c;能看懂Linux内核。拥有超过1300万行的代码&#xff0c;Linu…

springaop----springaop的使用(一)

与大多数技术一样&#xff0c; AOP 已经形成了自己的术语。描述切面的常用术语有通知&#xff08;advice&#xff09;、切点&#xff08;pointcut&#xff09;和连接点&#xff08;join point&#xff09;。从今天开始&#xff0c;我们对spring的切面编程做一个总结。她们都是你…

Microsoft .NET Pet Shop 4 架构与技术分析

1&#xff0e;项目概述与架构分析微软刚推出了基于ASP.NET 2.0下的Pet Shop 4, 该版本有了一个全新的用户界面。是研究ASP.NET 2.0的好范例啊&#xff0c;大家都知道&#xff0c;一直以来&#xff0c;在.NET和Java之间争论不休&#xff0c;到底使用哪个平台开发的企业级应用性能…

想领取开发套件,就来参加AIoT开发者大赛

你心目中的智慧校园长什么样&#xff1f; 传统校园上自习得排队等位&#xff0c;智慧校园手机一键查询空位&#xff0c;抢座占位有序便利&#xff1b; 传统校园灯光全靠手动调整&#xff0c;智慧校园灯光无感调控&#xff0c;营造全新智能光照环境&#xff1b;传统校园安全防护…

[教程]win10 ,ubuntu双系统安装避坑指南

这篇博客可以解决1.如何安装win10,ubuntu双系统2.如何使用win10引导Ubuntu&#xff0c;并且设置win10引导界面点击阅读原文获取更多信息。win10,ubuntu双系统的安装为什么要装双系统&#xff0c;之前用的虚拟机&#xff0c;但是虚拟机没有显卡&#xff0c;使用gazebo之类的3D仿…