loggerFactory java_java – 为Log4j 1.2注册自定义LoggerFactory的正确方法?

在避免大量修改文件的情况下,文章讨论了如何为Log4j 1.2注册自定义LoggerFactory以防止日志伪造。作者发现通过`log4j.loggerFactory`属性设置无法实现这一目标,而是需要创建Log4j类的子类。文中展示了如何创建一个自定义的ServletContextListener、自定义层次结构(MyHierarchy)、自定义PropertyConfigurator(MyPropertyConfigurator)以及自定义LoggerFactory(MyLoggerFactory),并在这些组件中注入自定义逻辑以确保使用自定义记录器工厂。
摘要由CSDN通过智能技术生成

我正在使用Log4j(1.2.16)登录的Web应用程序.为了避免编辑大量文件,我试图挂钩一个自定义的LoggerFactory实现,以防止日志伪造.

看来可以设置log4j.loggerFactory配置设置(项目使用属性文件方法)来指定要使用的记录器工厂.但是,这似乎不起作用.在检查了Log4j的源代码之后,看起来该属性从未真正使用过,即使它是由PropertyConfigurator类读取的.

检查更多的Log4j源代码,它似乎是实现我想要的唯一方法,我必须创建Log4j类的自定义子类.这是唯一的方法吗?

以下代表我在Web应用程序上下文监听器中必须要做的事情,以初始化Log4j,以便使用我的自定义记录器工厂:

package com.example.myapp.log4j;

import javax.servlet.ServletContextListener;

import javax.servlet.ServletContextEvent;

import javax.servlet.*;

public class MyLog4jInitContextListener implements ServletContextListener

{

public void contextInitialized(

ServletContextEvent event

) {

this.context = event.getServletContext();

String file = context.getInitParameter("log4jConfiguration");

if (file != null) {

String prefix = context.getRealPath("

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
slf4j (Simple Logging Facade for Java) 是一个 Java 日志框架的抽象层,它提供了一种简单的方式来使用多种不同的日志框架,如 log4j, java.util.logging(JUL)等。slf4j 通过提供一套通用的接口,使得开发者可以在不同的环境下使用不同的日志实现,而不需要改变代码。 LoggerFactory 是 slf4j 框架中的一个类,它提供了获取 Logger 实例的方法LoggerFactory 是一个抽象的工厂类,它可以根据当前的日志实现,返回相应的 Logger 实例。 使用 LoggerFactory 获取 Logger 实例的代码如下: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyClass { private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class); public void myMethod() { LOGGER.debug("Debug log message"); LOGGER.info("Info log message"); LOGGER.warn("Warn log message"); LOGGER.error("Error log message"); } } ``` 上述代码中,首先导入了 slf4j 的 LoggerLoggerFactory 类。然后在 MyClass 类中,通过 LoggerFactory.getLogger(MyClass.class) 方法获取了一个 Logger 实例,该实例的名称为 MyClass。在 myMethod() 方法中,使用该 Logger 实例打印了不同级别的日志信息。 需要注意的是,LoggerFactory.getLogger() 方法的参数应该传入当前类的 Class 对象,这样可以方便地标识出日志的来源。另外,LoggerFactory.getLogger() 方法返回的 Logger 实例是线程安全的,可以在不同的线程中共享使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值