`
sha1064616837
  • 浏览: 40444 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

log4j扩展使用

阅读更多
我们都知道日志管理就是在log4j.xml中配置:各种级别的日志怎么输出,利用那个Appender
写了一个自己的appender,日志既按要求录入我指定的表格,又按照log4j.xml中配置的执行:
1.定义自己的Appender继承JDBCAppender(因为我是要按我的要求入指定表)
  重写execute(sql)方法:利用JDBC入库操作。
/**
 * 重写log4j的日志保存类
 * @author xxx
 * @date 2014-12-1
 * @time 上午10:03:00
 * @version 1.0
 */
public class MyJDBCAppender extends JDBCAppender {
	private LoggingEvent e;
	/**
	 * 打开数据库
	 * @throws SQLException 
	 */
	public void openConn()
	{
		try
		{
			connection = getConnection();
		} catch (SQLException e)
		{
			e.printStackTrace();
			close();
		}
	}
	
	/**
	 * 重写入库方法,实现PreparedStatement
	 */
	@Override
	protected void execute(String sql) throws SQLException
	{
		PreparedStatement stmt = null;
		try
		{
			stmt = connection.prepareStatement(this.getSql());
			Long time = e.getTimeStamp();
			Log log = (Log) e.getMessage();
			stmt.setString(1, String.valueOf(time));// ID为当前时间
			stmt.setString(2, "xxx");// 操作类型
			stmt.setString(3, log.getCode());// CODE
			stmt.setTimestamp(4, new Timestamp(time));// TIME
			stmt.setBoolean(5, log.isSucceed());// RESULT
			stmt.setString(6, log.getLogType().name());// TYPE
			stmt.setString(7, log.getMemo());// MEMO
			stmt.setString(8, log.getName());// NAME
			stmt.setTimestamp(9, new Timestamp(time));// UPDATEDATE
			stmt.setString(10, null==log.getCreator()?null:log.getCreator().getId());
			stmt.execute();
		} catch (SQLException e)
		{
			if (stmt != null)
			{
				stmt.close();
			}
			e.printStackTrace();
		} finally
		{
			if (stmt != null)
			{
				stmt.close();
			}
		}
	}
	/**
	 * 初始化event
	 */
	protected String getLogStatement(LoggingEvent event)
	{
		e = event;
//		return getLayout().format(event);
		return null;
	}
	
}

2.再写一个自定义的日志工厂类:把刚刚自定义的Appender和Logger作为属性。
这样我logger.info(Log)的时候会先执行我自定义Appender中的execute方法
import org.apache.log4j.Logger;
/**
 * 日志入库类
 * @author xxx
 * @date 2014-12-1
 * @time 上午10:03:00
 * @version 1.0
 */
public class MyLog {
	private static MyJDBCAppender jdbcAppender;
	private static Logger logger = Logger.getLogger(MyLog .class);
	static{
		jdbcAppender = new MyJDBCAppender ();
		jdbcAppender.setDriver("数据库driver");
		jdbcAppender.setURL("数据库url");
		jdbcAppender.setUser("用户名");
		jdbcAppender.setPassword("密码");
		jdbcAppender.setSql("入库sql语句");
		jdbcAppender.openConn();//数据库连接一直开着
		logger.addAppender(jdbcAppender);
	}
	/**
	 * 关闭数据库连接
	 */
	public static void close()
	{
		jdbcAppender.close();
		jdbcAppender = null;
	}

     /**自定义各种日志模板 start*/
	/**
	 * 操作日志入库:一般操作成功的时候调用
	 * @param clazz:打印日志的类
	 * @param actionType:日志动作类型
	 * @param memo:操作描述
	 */
	public static void info(Class<?> clazz,ActionType actionType,String memo)
	{
		Log log = Log.Builder.newBuilder().actionType(actionType).isSucceed(true).build();
		log.setLogType(LogType.OPERATE);
		log.setCreator(SessionUser.getOperator());
		log.setMemo(memo);
		log.setCode(clazz.getSimpleName());
		logger.info(log);
	}	
	/**
	 * 错误操作日志入库:严重的错误操作
	 * @param clazz:打印日志的类
	 * @param actionType:日志动作类型
	 * @param result:是否成功
	 * @param memo:操作描述
	 */
	public static void error(Class<?> clazz,ActionType actionType,String memo)
	{
		Log log = Log.Builder.newBuilder().actionType(actionType).build();
		log.setLogType(LogType.OPERATE);
		log.setSucceed(false);
		log.setCreator(SessionUser.getOperator());
		log.setMemo("严重错误操作_"+memo);
		log.setCode(clazz.getSimpleName());
		logger.error(log);
	}
	
	/**
	 * 系统日志入库
	 * @param clazz:打印日志的类
	 * @param actionType:日志动作类型
	 * @param result:是否成功
	 * @param user:操作用户
	 * @param ip:IP地址
	 * @param memo:操作描述
	 */
	public static void infoSys(Class<?> clazz,ActionType actionType,boolean result,Operator user,String ip,String memo)
	{
		Log log = Log.Builder.newBuilder().actionType(actionType).isSucceed(result).build();
		log.setLogType(LogType.SYS);
		log.setCreator(null==user?SessionUser.getOperator():user);
		log.setName(null==ip?SessionUser.getUserIp():ip);//添加IP
		log.setMemo(memo);
		log.setCode(clazz.getSimpleName());
		logger.info(log);
	}
	
	/**
	 * 错误系统日志入库
	 * @param clazz:打印日志的类
	 * @param actionType:日志动作类型
	 * @param user:操作用户
	 * @param ip:当前用户ip
	 * @param memo:操作描述
	 */
	public static void errorSys(Class<?> clazz,ActionType actionType,Operator user,String ip,String memo)
	{
		Log log = Log.Builder.newBuilder().actionType(actionType).build();
		log.setLogType(LogType.SYS);
		log.setSucceed(false);
		log.setCreator(null==user?SessionUser.getOperator():user);
		log.setName(null==ip?SessionUser.getUserIp():ip);
		log.setMemo(memo);
		log.setCode(clazz.getSimpleName());
		logger.error(log);
	}
	
	/**
	 * 安全日志入库
	 * @param clazz:打印日志的类
	 * @param actionType:日志动作类型
	 * @param result:是否成功
	 * @param memo:操作描述
	 */
	public static void infoSecurity(Class<?> clazz,ActionType actionType,boolean result,String memo)
	{
		Log log = Log.Builder.newBuilder().actionType(actionType).isSucceed(result).build();
		log.setLogType(LogType.SECURITY);
		log.setCreator(SessionUser.getOperator());
		log.setMemo(memo);
		log.setCode(clazz.getSimpleName());
		logger.info(log);
	}
	
	/**
	 * 警告安全日志入库
	 * @param clazz:打印日志的类
	 * @param actionType:日志动作类型
	 * @param result:是否成功
	 * @param memo:操作描述
	 */
	public static void warnSecurity(Class<?> clazz,ActionType actionType,boolean result,String memo)
	{
		Log log = Log.Builder.newBuilder().actionType(actionType).isSucceed(result).build();
		log.setLogType(LogType.SECURITY);
		log.setCreator(SessionUser.getOperator());
		log.setMemo(memo);
		log.setCode(clazz.getSimpleName());
		logger.warn(log);
	}
	
	/**
	 * 错误安全日志入库
	 * @param clazz:打印日志的类
	 * @param actionType:日志动作类型
	 * @param result:是否成功
	 * @param memo:操作描述
	 */
	public static void errorSecurity(Class<?> clazz,ActionType actionType,String memo)
	{
		Log log = Log.Builder.newBuilder().actionType(actionType).build();
		log.setLogType(LogType.SECURITY);
		log.setSucceed(false);
		log.setCreator(SessionUser.getOperator());
		log.setMemo(memo);
		log.setCode(clazz.getSimpleName());
		logger.error(log);
	}
 /**自定义各种日志模板 end*/
}
分享到:
评论

相关推荐

    log4j实用配置扩展

    #### 四、log4j的核心组件 log4j的核心组件主要包括**Loggers(记录器)**、**Appenders(输出源)**和**Layouts(布局)**。 1. **Loggers (记录器)**:负责生成日志信息,并决定是否发送日志信息到Appenders。记录器...

    Log4j2简介及与Log4j效率对比

    4. **插件式架构**:Log4j2采用了插件式的软件架构,这使得框架易于扩展而无需修改其核心代码。这种设计遵循了“对修改封闭,对扩展开放”的原则,增强了框架的灵活性。 5. **简化配置**:Log4j2配置文件更加简洁易...

    Log4j的扩展

    Java开发中使用Log4j 来记录log非常的方便,但是出现问题时需要查询Log时是很痛的,因为Log4j只提供了将Log记录的文件的方法却没有将文件分开来记录。如果Log时间很长的问题那就麻烦了。特此扩展了Log4j 中的...

    Log4j2、Fastjson、Log4j的BurpSuite插件亲测有效

    Log4j2作为Log4j的升级版本,它在性能、可配置性和可扩展性上有了显著提升,同时也修复了Log4j的一些已知问题。Fastjson则是阿里巴巴的一个开源项目,它提供了快速的JSON解析和生成性能,广泛应用于Java应用程序的...

    log4j使用详解log4j使用详解

    ### Log4j 使用详解 #### 一、Log4j简介 Log4j 是 Apache 的一个开源项目,通过使用 Log4j,开发者能够控制日志信息...此外,Log4j 还提供了丰富的扩展性,可以通过自定义 Appender 和 Layout 来满足特定的应用需求。

    log4j-2.17.1的jar包,导入即可使用

    Log4j是Java编程语言中广泛使用的日志记录框架,特别是在企业级应用和大型系统中。这个"**log4j-2.17.1**"的版本是该框架的一个更新,提供了修复的安全漏洞和性能优化。以下是关于Log4j 2.17.1的一些关键知识点: 1...

    log4j-api-2.12.4.ja和log4j-core-2.12.4.jar

    总的来说,Log4j 2是Java开发中不可或缺的工具,它提供强大的日志记录能力并注重性能和可扩展性。在选择和使用特定版本时,应密切关注安全更新,确保及时修补任何潜在的安全风险,以保护应用程序和用户数据的安全。...

    log4j-api-2.17.1.jar和log4j-core-2.17.1.jar

    总的来说,log4j-api-2.17.1.jar和log4j-core-2.17.1.jar是Log4j2的核心组件,它们共同构建了一个强大且可扩展的日志框架。开发者应熟悉这两个库的职责和交互方式,以便充分利用Log4j2的功能,同时确保系统的安全性...

    log4j-API-最新稳定版本log4j-1.2.17

    10. **可扩展性**:Log4j API允许开发者通过插件机制轻松添加新的appender、filter和layout。 总的来说,Log4j API为Java开发者提供了一个强大而灵活的日志解决方案,通过其丰富的功能和可定制性,能够适应各种项目...

    log4j示例项目

    这个“log4j示例项目”旨在帮助开发者理解和使用Log4j,通过该项目,我们可以深入学习Log4j的配置、使用方法以及其在实际开发中的应用。 **1. Log4j的组成部分** Log4j主要包括三个核心组件:Logger(日志器)、...

    log4j使用jar包和log4j.properties配置文件

    Log4j是Apache组织提供的一款广泛使用的Java日志框架,因其灵活性、高效性和可扩展性而备受青睐。本文将详细探讨Log4j的使用,主要关注1.2.17版本的jar包以及配置文件`log4j.properties`。 ### 1. Log4j简介 Log4j...

    Log4j2学习log4j2.xml配置模板

    Log4j2 配置模板学习笔记 Log4j2 是 Java 语言中一种流行的日志记录工具,它提供了灵活的日志记录管理功能。...*可扩展性强:Log4j2 提供了非常强的可扩展性,可以根据需要添加新的 appender 和配置。

    log4j配置和加载方法

    通过上述分析,我们可以看出log4j的配置与加载方法具有高度的灵活性和扩展性,能够满足不同场景下的日志管理需求。开发者应根据具体的应用环境和日志管理策略,合理配置log4j,以提升应用的稳定性和可维护性。

    logging-log4j2-log4j-2.15.0-rc2.zip

    Log4j,作为Java领域广泛使用的日志记录框架,一直以来都是开发者们的重要工具。这次我们关注的是其最新版本——logging-log4j2-log4j-2.15.0-rc2。这个版本在安全性和性能上都做了进一步的优化和提升,旨在为开发者...

    log4j.jar包,和log4j.properties配置文件下载

    Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中插入日志语句,以便跟踪程序的运行情况、调试错误、监控性能等。这个框架由Apache软件基金会开发,是许多Java项目的首选日志解决方案,因为它具有...

    Log4J完整说明和配置

    ### Log4J完整说明与配置解析 #### 一、Log4J简介 Log4J是Apache的一个开源项目,用于提供灵活的...此外,Log4J还提供了丰富的扩展机制,如MDC(Mapped Diagnostic Context)等功能,进一步增强了其灵活性和适应性。

    The Complete Log4j Manual

    Log4j之所以受到广泛使用,是因为其具有灵活性、配置简单、扩展性强等特点。它允许开发者自由地控制日志记录的细节,如输出格式、存储位置、输出级别等,这对于大型应用系统的日志管理尤为重要。 以上知识点虽然...

    log4j + slf4j-api + slf4j-log4j12

    总的来说,`log4j`、`SLF4J`和`slf4j-log4j12`的结合,为Java应用程序提供了一种高效、可扩展且灵活的日志处理方案。这种组合允许开发者专注于编写业务代码,而不必担心具体日志实现的细节,同时也方便了日志框架的...

    log4j.properties 的使用详解(含log4j.properties)

    log4j是Apache组织提供的一款开源日志框架,它具有可配置性、可扩展性和高性能的特点。log4j的核心组件包括Appender(输出目的地)、Layout(格式化输出)和Logger(日志级别控制)。在log4j.properties配置文件中,...

Global site tag (gtag.js) - Google Analytics