java log4j 写日志_Java log4j同时写入文本日志和数据库日志

版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创!

恰饭广告

Log4jUtil.java

import org.apache.log4j.Logger;

import org.apache.log4j.MDC;

public class Log4jUtil {

private static Logger logger = Logger.getLogger(Log4jUtil.class.getName());

/**

* 增删改动作的日志写入 (谁 操作 什么)

* @param op 用户操作

* @param param 传入参数

*/

public static void logInfo(String op, String param) {

if( (op.equals("")||op==null) || (param.equals("")||param==null)){

System.out.println("没有参数传入");

}

else{

MDC.put("user", "session.id"); // 用户id

MDC.put("operation", op); // 用户操作

MDC.put("param", param); // 接收参数

logger.info("");

MDC.remove("user");

MDC.remove("operation");

MDC.remove("param");

}

}

/**

* 发生异常的日志写入

* @param ex 异常信息

*/

public static void logError(String ex) {

logger.error(ex);

}

}

log4j.properties(放在src目录下)

### 设置级别和目的地(这里多个目的地) ###

log4j.rootLogger = CONSOLE,InfoLog,ErrorLog,logDB

### 输出到控制台 ###

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.Target = System.out

log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L [%t:%r]- %m%n

### 输出文件info ###

log4j.logger.infolog = InfoLog

log4j.appender.InfoLog = org.apache.log4j.DailyRollingFileAppender

log4j.appender.InfoLog.File = logs/info.log

log4j.appender.InfoLog.Append = true

log4j.appender.InfoLog.Threshold = INFO

log4j.appender.InfoLog.DatePattern = '.'yyyy-MM

log4j.appender.InfoLog.layout = org.apache.log4j.PatternLayout

log4j.appender.InfoLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] - [%X{user} %X{operation} %X{param}] - %m%n

### 输出文件error ###

log4j.logger.errorlog = ErrorLog

log4j.appender.ErrorLog = org.apache.log4j.DailyRollingFileAppender

log4j.appender.ErrorLog.File = logs/error.log

log4j.appender.ErrorLog.Append = true

log4j.appender.ErrorLog.Threshold = ERROR

log4j.appender.ErrorLog.DatePattern = '.'yyyy-MM

log4j.appender.ErrorLog.layout = org.apache.log4j.PatternLayout

log4j.appender.ErrorLog.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] - [%X{user} %X{operation} %X{param} - %m%n

#将日志输出到SQLserver数据库

log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender

log4j.appender.logDB.layout = org.apache.log4j.PatternLayout

log4j.appender.logDB.Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver

log4j.appender.logDB.URL = jdbc:sqlserver://localhost:1433;DatabaseName=hibernatetest

log4j.appender.logDB.User = sa

log4j.appender.logDB.Password = 123456

log4j.appender.logDB.Sql =INSERT INTO T_Log(create_date,[level],category,file_name,thread_name,line,all_category,message,[user],operation,param)values('%d{yyyy-MM-dd HH\:mm\:ss}','%p','%c','%F','%t','%L','%l','%m','%X{user}','%X{operation}','%X{param}')

Sql脚本(SQL Server)

CREATE TABLE [dbo].[T_Log](

[id] [int] IDENTITY(1,1) NOT NULL,

[create_date] [datetime] NULL,

[level] [varchar](50) NULL,

[category] [varchar](50) NULL,

[file_name] [varchar](50) NULL,

[thread_name] [varchar](50) NULL,

[line] [int] NULL,

[all_category] [varchar](50) NULL,

[message] [varchar](50) NULL,

[user] [varchar](50) NULL,

[operation] [varchar](50) NULL,

[param] [varchar](50) NULL,

CONSTRAINT [PK_T_Log] PRIMARY KEY CLUSTERED

(

[id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

相关jar包

log4j.jar、mssql-jdbc.jar

注意:

log4j.properties文件的数据库连接根据自己的数据库来

让我恰个饭吧.ヘ( ̄ω ̄ヘ)

支付宝 ——————- 微信

恰饭广告

b2fa10417bcbd2c397d3c42ce544672e.gif

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

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

相关文章

订单生产计划表范本_工厂生产管理为什么需要ERP软件?

对于工厂来说,规模大了,管理问题也就随之多了,在工厂生产流程中,我们常见的一些生产现象,比如生产计划表徒具形式、各生产部门半成品堆积、生产计划达标率低、前后工序原材料或半成品衔接不上、经常追加或取消生产计划…

P1266 速度限制

速度限制 洛谷链接 题目大意: 在一个城市中,每条道路有限速和长度,通过一条道路的时间为这条道路的长度除以限制的速度,有的道路不知道限速为多少,那么就按现在的速度走这条路,找出从第一个点到目标点的最短…

mysql递归查询所有上下节点_非递归打印二叉树的所有路径,保存父节点和孩子节点到底有啥差别...

题目解读题目要求输出二叉树的所有路径(字符串形式),乍一看很简单,不就是二叉树的遍历嘛!其实不然,首先,我们用非递归的方式(C)解决这道题(递归在产品代码中是不允许使用的,其次定位 bug 的时候非常困难)。…

发现大量Java原语集合处理

在阅读博客文章5减少Java垃圾收集开销的技巧时 ,我想起了一个名为Trove的小型Java收集库,该库“为Java提供了高速的常规和原始收集”。 我对应用Trove允许原始类型的集合而不是要求集合中的元素成为完整的引用对象的能力特别感兴趣。 我在这篇文章中会更…

nginx配置多个server_Nginx基本属性配置详解

. Nginx服务的基本配置1.1 用于调试进程和定位问题的配置项是否以守护进程的方式运行nginx# 默认ondaemon on|off;是否以master/worker方式工作# 默认on,指定了是否以master-worker进程的方式运行,如果设置为off,那么所有的请求将只会由maste…

数据增长率怎么算_20年老股民告诉你5个数据可轻松算出股价是否高估

自从开通自媒体以来,有很多朋友问我该如何正确判断股票的合理价格呢?说得太专业,可能很多新入市的股民朋友看不懂。那有没有一种估值方法通俗易懂呢?说实话,真有点为难我了。我首先想到了最简单的PE估值法,…

ad 单点登录 java 访问权限_AD 单点登录以及windows认证详细说明

上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证。Forms身份认证虽然使用广泛,不过,如果是在 Windows Active Directory 的环境中使用ASP.NET, 那么使用Windows身份认证也…

index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发

JavaWeb基础与应用2.Servlet开发Servlet是sun公司提供的一门用于开发动态web资源的技术。Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:编写一个Java类&…

element ui后台html_GitHub上10个开源且优秀的后台管理系统UI面板

作者:SevDotwww.jianshu.com/p/3bc7404af887Web 开发中几乎的平台都需要一个后台管理,但是从零开发一套后台控制面板并不容易,幸运的是有很多开源免费的后台控制面板可以给开发者使用,那么有哪些优秀的开源免费的控制面板呢&#…

JAVA第七次作业

《Java技术》第七次作业 (一)学习总结 1.写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。 WindowListener:窗体事件,专门处理窗体的事件监听口,窗体的所有变化都可以使用此…

输出以下图案菱形7行_春夏格子图案超流行,三木的一款格子连衣裙,带来田园少女风...

春夏搭配中,增添了华丽格子图案搭配,从经典的格子裙子,到衬衫裙等。根据搭配不同而成为不同风格。所以,这一次,重点介绍格子裙和长衬衫的几种种搭配。格子裙子的春夏搭配推荐LOOK:1 [格子褶皱裙子棕色T恤]的…

使用Project Jigsaw的JDK 9 Early Access上的Eclipse IDE

几周前,我写了关于在Java 9上运行Eclipse Neon的文章 (尽管,我在帖子标题中错误地和令人尴尬地留下了“火星”)。 值得注意的是,我列出的步骤也适用于带有Project Jigsaw (Java模块化)构建的JDK…

arduino蜂鸣器_板卡推荐BPIUNO32 arduino 开发板,支持webduino与arduino应用

BPI:UNO32(也称为BPI-UNO32,被称为BPI UNO32)是一个带有Xtensa 32位LX6的单/双核心处理器的嵌入式系统的ESP32。支持Webduino和arduino的功能。BPI-UNO32使用的是esp-WROOM32,MCU。ESP32是一种集成2.4 GHz Wi-Fi和蓝牙双模式的单芯片解决方案。该公司的4…

Unity优化之GC——合理优化Unity的GC (难度3 推荐5)

原文链接:http://www.cnblogs.com/zblade/p/6445578.html 最近有点繁忙,白天干活晚上抽空写点翻译,还要运动,所以翻译工作进行的有点缓慢 。 本文续接前面的unity的渲染优化,进一步翻译Unity中的GC优化,英文…

centos重置系统_双系统下Linux系统无法启动及其引导丢失之解决

背景介绍: 很久很久以前, 我在 NewSurfacePro(SP5) 里插了一张 128G 内存卡, 费力九牛二虎之力在上面装了 Deepin, 后来在某次不知道是 Windows 还是 Deepin 更新后, Deepin 启动时总要发生一个极具 Linux 特色的启动错误, witch 似乎在我树莓派上出现过, 折腾了很久也没好, 就…

Java 7和Java 8之间的细微自动关闭合同更改

Java 7的try-with-resources语句和与该语句一起使用的AutoCloseable类型的一个不错的功能是,静态代码分析工具可以检测到资源泄漏。 例如,Eclipse: 具有以上配置并尝试运行以下程序时,您将收到三个警告: public stat…

reduce python3_更少循环?看看这3个Python函数

原标题:更少循环?看看这3个Python函数 全文共1146字,预计学习时长5分钟图源:wired 诞生于1991年的Python,这几年突然火了。简历上有了Python,就业竞争力瞬间提升,甚至一些小学教材上都出现了Pyt…

java图片上传(mvc)

最近有开始学起了java,好久没写文章了,好久没来博客园了。最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的。后台接收用的是mvc。不墨迹了,直接上图。 先看目录结构。idea开发。 一、图片上传还是使用的这款jq插件。前端部署…

appengine_Google AppEngine:任务队列API

appengine任务队列 com.google.appengine.api.taskqueue 使用任务队列,用户可以发起一个请求,以使应用程序执行此请求之外的工作。 它们是进行后台工作的强大工具。 此外,您可以将工作组织成小的离散单元(任务)。 然后…

Android studio Error occurred during initialization of VM 问题解决

最近开发导入其他Android项目遇见的问题,如下图: 解决办法: 将org.gradle.jvmargs的值该为521(堆内存分配过高导致) 备忘,希望能帮助到大家转载于:https://www.cnblogs.com/yunfang/p/6857096.html