java日志接口(java接口加日志)

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

本篇文章给大家谈谈java日志接口,以及java接口加日志对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

微信号:cloud7591
如需了解更多,欢迎添加客服微信咨询。
复制微信号

本文目录一览:

java日志的filter

Filter可以视作是servlet的加强版,主要用作对用户的请求进行预处理,或者对返回给客户端的结果进行再次加工,是一个典型的链式处理模式。本篇简单介绍filter的基本使用方法,主要涉及以下内容:

Filter的背景知识

使用Filter的流程

Filter的生命周期

一个完整的实例

一、Filter的简单介绍

Filter在英文中是过滤器的意思,当然在此处的使用也是完美的切合了它的意思,我们使用filter的主要目的就是完成一个过滤的作用。可以在一个请求到达servlet之前,将其截取进行逻辑判断,然后决定是否放行到请求的servlet。也可以在一个response到达客户端之前,截取结果进行逻辑判断,然后决定是否允许返回给客户端。所以filter有如下几个种类:

用户授权的filter:filter负责判断用户是否有权限请求该页面,给予过滤判断

日志filter:截取某个用户在本网站上的所有请求,记录轨迹

负责解码的filter:规定处理本次请求的解码方式

最后需要注意的是,一个filter过滤器可以加在多个servlet控制器上,当然多个filter过滤器也是可以加在一个servlet控制器上的。由此也是可以看出来,我们使用filter往往是对一些公共的操作进行处理,例如:判断用户权限,解码本次请求等,还比如,我们的web应用中某些页面是需要用户登录后才能访问的,以往我们都是在每个servlet页面加上判断控制,导致代码冗余,有了filter,我们可以定义一个实现了filter的过滤器,让需要判断是否登录的页面都加上这么一个过滤器,可以大大降低代码的冗余程度。

二、Filter的使用流程

在Java中如果想要自定义一个filter过滤器的话,需要继承Javax.servlet.Filter接口,这个接口中只有三个方法:

default void init(FilterConfig filterConfig)void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3)default void destroy()

其中init和destroy方法是有默认实现的,也就是我们不是必须重写这两个方法,但是doFilter 这个方法是一个核心的方法,是我们必须要实现的。首先我们看init方法的作用,这个方法是用来初始化filter实例的,也就是当用户请求了某个拦截器而此拦截器又匹配了某个过滤器,此时web容器就会定位到该过滤器然后创建该filter类的实例对象并调用此实例的init方法,完成初始化工作。对于destroy方法毋庸置疑就是在过滤器执行结束的时候调用,主要完成对一些资源的释放。下面主要看dofilter这个方法。

doFilter方法是filter接口中的核心方法,一旦创建完该过滤器的实例之后,会执行dofilter方法,所有的过滤逻辑都是在此方法中进行的。主要有三个参数,第一个参数是一个ServletRequest对象,HttpServletRequest继承于此接口,当用户请求某个拦截器的时候,检测到此请求存在过滤器,于是会封装好本次请求的相关数据,传递给dofilter的ServletRequest参数,ServletResponse参数的来源和ServletRequest是一样的,都是由客户端封装过来的。至于第三个参数,这是一个FilterChain处理链,详细的介绍等说明了web.xml中配置filter之后。

第一步如上,创建一个继承自filter接口的类,并实现其中的三个方法。第二步是在web.xml中配置该类用于过滤哪些拦截器。web.xml代码如下:

?xml version="1.0" encoding="UTF-8"?web-app xmlns=""

        xmlns:xsi=""

        xsi:schemaLocation=" "

        version="3.1"

   !--定义filter--

   filter

       filter-nameisLogin/filter-name

       filter-classTest_f.MyFilter/filter-class

   /filter

   !--定义filter拦截的地址--

   filter-mapping

       filter-nameisLogin/filter-name

       url-pattern/a/url-pattern

   /filter-mapping

   filter-mapping

       filter-nameisLogin/filter-name

       url-pattern/b/url-pattern

   /filter-mapping/web-app

如上述的代码,我们需要两个操作,首先是定义一个filter,指定了该filter的name和相对应的过滤器类。然后我们可以通过filter-mapping映射过滤器和URL,此处使用了两个映射,对该过滤器指定了对路径名为/a和/b的请求进行拦截。当然这个url-pattern元素的值可以有以下三种形式,完全匹配(/a/b等),目录匹配(/* 、 /abc/等),扩展名(.a,*.b等)。

了解了配置filter的主要操作之后,我们回去看过滤器类,我们说init方法是在首次创建filter实例的时候,用于执行初始化操作的,其中有个参数FilterConfig ,这是当前filter的配置信息,其中方法如下:

String getFilterName();ServletContext getServletContext();String getInitParameter(String var1);EnumerationString getInitParameterNames();

其实在创建filter实例的时候,web容器会将此实例对应在web.xml中的配置信息读取并封装成一个FilterConfig 对象传递给init方法,getFilterName方法就是我们在web.xml中配置的filter-name,getServletContext会获取当前servlet的上下文,当我们在定义filter的时候使用init-param来定义一些初始化参数的时候,就可以使用此方法来获取这些初始化参数。getInitParameterNames方法用于获取所有初始化参数的枚举集合。这样我们在init方法中就可以获取这些配置参数,初始化filter实例。

上面我们只定义了一个filter,如果我们对于一次请求需要执行多个filter,进行过滤操作的话,web容器会在你请求某个URL的时候,在web.xml中找到所有匹配的filter,按照注册的顺序以FilterChain 链的形式传递到方法doFilter的第三个参数中,而这个filterChain中只有一个方法:

void doFilter(ServletRequest var1, ServletResponse var2)

如果我们在 void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) 方法中调用var3.doFilter(var1,var2),就代表此filter实例结束,则web服务器会检查FilterChain对象中是否还有filter对象(因为这是一个链,filter的数量是大于等于一的),如果没有就会放行,直接调用目标地址,如果还有filter对象,就会转而执行下一个filter。正是由于这样的机制,我们才可以对于一个URL请求添加多个filter过滤器。

三、一个简单的实例

下面通过一个简单的实例直观的感受下filter过滤器的作用:

public class MyFilter implements Filter {    @Override

   public void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException{

       HttpServletRequest req = (HttpServletRequest)var1;

       HttpSession session = req.getSession();

       String state = (String)session.getAttribute("state");        if(state.equals("1")){

           var3.doFilter(var1,var2);

       }else{

           HttpServletResponse response =  (HttpServletResponse)var2;

           response.sendRedirect("Error_page.html");

       }

   }

}

//web.xml    filter

       filter-nameisLogin/filter-name

       filter-classTest_f.MyFilter/filter-class

   /filter

   !--定义filter拦截的地址--

   filter-mapping

       filter-nameisLogin/filter-name

       url-pattern/index.jsp/url-pattern

   /filter-mapping

%@ page contentType="text/html;charset=UTF-8" language="java" %html

 head

   title/title

 /head

 body

   h1这是index页面/h1

 /body/html

//set.jsp//为了使程序简单,我们采用手动设置session//在实际的项目中,当用户登录之后自动设置session%@ page contentType="text/html;charset=UTF-8" language="java" %html

 head

   title/title

 /head

 body

   %pageContext.getSession().setAttribute("state","0");%

 /body/html

我们首先访问set.jsp页面设置本次会话的session值,然后修改浏览器地址栏访问index.jsp页面

敲下回车键,结果如下:

我们先看,敲下回车键之后,程序怎么执行的,因为我们在web.xml中配置了MyFilter的拦截URL为index.jsp,所以当我们访问index.jsp的时候,会创建MyFilter 实例对象,封装配置信息到FilterConfig对象中,然后封装request请求和response,还有从web.xml 中读取的FilterChain对象传入MyFilter的doFilter方法中,我们在其中获取本次会话的session对象,取得其中的数据,如果为一放行,否则跳转到错误页面。此处的state的session值为0,我们在set.jsp中设置的,大家也可以在set.jsp页面设置其值为1,这样最终的结果会是这样的:

上述的demo只是为了简单的演示,其实使用filter可以完成大大的降低我们的代码的冗余程度。这个例子是为了演示,所以很简单。

四、Filter 的生命周期

当用户请求某个页面时候,会到web.xml中匹配是否存在能够匹配上此次请求的filter,如果有封装它的配置信息,FilterChain链。然后调用init方法,完成初始化,接着调用dofilter方法,处理核心逻辑,当此实例被销毁的时候,会调用destroy方法。

private static Logger logger = Logger.getLogger(MstNinushiAction.class); 请问什么意思啊?

private static Logger logger = Logger.getLogger(MstNinushiAction.class)的意思是:

得到MstNinushiAction的Class类型对象。因为Logger.getLogger方法需要传入Class类型对象,这样该logger的信息中会详细体现出是哪个路径的哪个类的日志。

“.class”的作用:

**.class是将要加入日志的类加进入。假如myclass这个类需要加日志信息就在private static Logger logger = Logger.getLogger(myclass.class);

这是获取一个myclass类的logger myclass内定义的日志信息就能够显示出来了。

扩展资料:

Java日志管理方法:

1、log4j

log4j是Apache的一个开源项目,主要是用来做Java开发中的日志管理工作。主要是由三个重要组件构成的。可管理日志的优先级、输出目的地以及输出格式等。它的配置文件主要有XML和properties两种,当然,也可以在程序里配置,但实际开发中一般使用properties文件。

2、Commons logging

Apache针对不同的开发语言做了一系列的日志工具包,在Java、.net、php、c++上都可以用,并且为这些日志制定了风格一致的操作方式.

这里就实现了Commons-logging(JCL),Commons-logging主要是为哪些需要在不同环境下使用不同日志结构做开发的程序员而编写的,其中包括Apache Log4j和Java log。

使用Commons-loogging的Log接口,并且在运行时决定使用哪种日志架构。现在使用Commons-logging和Log4J已经成为了Java日志的标准解决方案。

在java中如何使用记录日志API

import java.util.logging.*;

public class BasicLoggingExample {

public static void main(String args[])

{

Logger logger = Logger.getLogger("BasicLoggingExample");

logger.log(Level.INFO, "Test of logging system");

}

}

getLogger

public static Logger getLogger(String name)为指定子系统查找或创建一个 logger。如果已经创建了具有给定名称的 logger,则返回该 logger。否则创建一个新的 logger。

如果创建了新的 logger,则根据 LogManager 的配置来其配置日志级别,并将日志输出发送到其父处理程序。日志配置注册在 LogManager 全局命名空间内。

参数:

name - logger 的名称。这应该是一个圆点分隔的名称,并且通常应该基于子系统的包名或类名(如 java.net 或 javax.swing)。

log

public void log(Level level,String msg)记录一条不带参数的消息。

如果当前对于给定的消息级别而言 logger 是启用的,那么将给定的消息转发到所有已注册的输出 Handler 对象。

参数:

level - 某个消息级别标识符,例如 SEVERE。

msg - 字符串消息(或消息类别中的键)。

java 日志接口怎么写

可以考虑用jms把日志单独发送到一个消息系统,消息系统采用apache activeMQ来实现,web系统只管往外发送日志的jms,消息系统负责日志的写,每次从日志队列中获取日志批量保存到数据库,日志表可以每天一张表,免得数据量过大影响插入速度。

用JAVA定义一个接口用于查询日志文件 日志文件有ID标识,用户名,日志内容等属性; 怎么去实现

首先定义javabean,包括属性ID标识,用户名,日志内容等属性。如果使用hibernate就更简单了。用方法this.getTemplateHibernate.find("from Log");就行了,你也可以用jdbc来获取。将结果集的信息取出来即可

请教一个简单的java日志怎样写

关于java日志,下面以Log4j为例子说明(供参考)。

1、导包(Log4j所依赖的jar包)

2、配置属性文件。如下:

3、遍写调用日志方法的接口

public interface LoggerUtil {

 

    // 得到Logger,用于打印日志

    Logger logger = Logger.getLogger(LoggerUtil.class);

}

4、使用Log4j

//删除数据

    @RequestMapping("/delete.do")

    public String delete(Students students) {

 

        try {

             

            stuService.delete(students);

        } catch (Exception e) {

            // 直接使用

            LoggerUtil.logger.error(e.getMessage());

        }

        return "redirect:selectAll.do";

    }

关于java日志接口和java接口加日志的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发布于 2023-04-06 20:04:38
收藏
分享
海报
31
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了