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

恰饭广告

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文件的数据库连接根据自己的数据库来

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

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

恰饭广告

java log4j 写日志_Java log4j同时写入文本日志和数据库日志相关推荐

  1. java高效写文件_java如何高效读写10G以上大文件

    有一份10G以上大文本文件,需要替换里面的一些文本信息(每一行都有),如何高效读并替换掉生成新的文件 先分割成多个文件 多个线程操作多个文件,避免两个线程操作同一个文件 按行读文件并按行写入新的文件 ...

  2. java 读者写者_Java实现生产者消费者问题与读者写者问题详解

    1.生产者消费者问题 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品.解决生产者/消费者问题的方法可分为两 ...

  3. java nio 写事件_Java NIO

    java Nio Selector 选择器 Buffer 缓冲器 Channel 通道 Selector是NIO的核心,是channel的管理者,通过执行select()阻塞方式,监听是否有chann ...

  4. java追加txt文件_java怎么追加写入txt文件

    java中,对文件进行追加内容操作的三种方法! import java.io.BufferedWriter;import java.io.FileOutputStream;import java.io ...

  5. java 怎么写异步方法_java如何学习异步编程?

    昨天头儿给的学习文档我还没看完,头儿说:"MongoDB光会简单的添删改查什么的不行,要深入了解,你们连$set和$inc使用场景都分不清." 确实,学习过一年多SQL,确实对学习 ...

  6. java如何写单元测试_java如何使用JUnit进行单元测试

    注:所有内容都是在eclipse上实现,关于eclipse的安装和jdk的安装配置,请看:http://www.cnblogs.com/fench/p/5914827.html 单元测试是什么? 百度 ...

  7. java怎么写函数_java构造函数怎么写

    java构造函数怎么写 发布时间:2020-06-29 11:50:19 来源:亿速云 阅读:114 作者:Leah java构造函数怎么写?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可 ...

  8. java null 写前面_java中判断对象为null时,null在前面还是后面

    因为目前只学习并使用java语言,所以这里主要是根据java来说的 Java中对null进行判断放在前后没有什么区别,只是为了代码规范,为了避免写代码时书写错误. 下面面两个测试Demo都没有报错.n ...

  9. java 遍历写什么_Java文件遍历及文件读写

    (1)遍历制定路径内的所有文件 public static List GetAllFile(String filePath){ List fileList = new ArrayList(); Fil ...

最新文章

  1. mouseOver/mouseOut 与 rollOver/rollOut的区别
  2. 学生专用计算机如何打游戏,电竞专业学生日常:白天学语数外计算机,晚上才打游戏...
  3. 程序员面试100题之十五:数组分割
  4. 复试计算机网络与软件工程,2018华南理工大学软件工程复试经验贴
  5. 日期多选插件Kalendae.js
  6. excel合并两列内容_EXCEL数据合并、批量添加内容知识,高手嫌弃,新手太需要...
  7. Ring Buffer介绍
  8. 心理测试单机小软件,十个有趣的心理小测试 好玩的心理测试题
  9. MATLAB/Simulink当真,开环Buck、闭环Buck、双闭环Buck仿真;开环控制的半桥LLC谐振变换器,全桥LLC谐振变换器和电压闭环控制的半桥LLC
  10. 中国企业数智化价值不高,主要是因为三个问题
  11. Python虚拟环境安装与pyenv
  12. 在服务器上设置虚拟传入,如何配置 SMTP 虚拟服务器以进行邮件传递
  13. blender UV基础
  14. PADS逻辑系列含义
  15. C#打印标签(包括二维码和一位条码)
  16. Html5大文件断点续传实现方法
  17. 每日10行代码57: appium测试坚果手机出现socket hang up报错的解决
  18. 功放前级的左右_Altitude32前级功放题 - 什么是全景声功放_全景声功放有哪些
  19. html游戏能在手机上玩吗,怎么在电脑上玩手机游戏? 每日一答
  20. 股票期权与定价以及用python实现

热门文章

  1. 【渝粤教育】 广东开放大学 21秋期末考试物业经营管理实务10123k2
  2. 【渝粤教育】 国家开放大学2020年春季 1107传感器与测试技术 参考试题
  3. 2021苏州大学计算机考研分数,苏州大学2021考研分数线已公布
  4. input不可编辑属性_谁不喜欢图文并茂呢:基于多模态信息的属性抽取
  5. vc mysql 图片_VC连接MySQL
  6. 2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用
  7. 【RS码1】系统RS码编码原理及MATLAB实现(不使用MATLAB库函数)
  8. Collatz函数的C++递归实现
  9. 通用版!完整代码,单链表SingleLinkedList增删改查,反转,逆序,有效数据等Java实现
  10. 模板库 | 销售管理类报表,邀您提反馈