Struts2 日志原理及配置方法(结合Log4j)

Struts2 日志原理及配置方法(结合Log4j) NULL 博文链接:https://adrain-work-163-com.iteye.com/blog/1545091 立即下载

原文地址:http://adrain-work-163-com.iteye.com/blog/1545091

Struts2  日志原理及配置方法

Struts2没有直接使用Log4j或JCL(Apache Java Commons Logger),也没有使用slf4j它先编写了自己的LoggerFactory(com.opensymphony.xwork2.util.logging.LoggerFactory),然后让其选择使用何种LoggerFactory,然后再进行日志处理
如果你在使用Struts2的类中使用它的日志系统,如在action中使用,可以按照以下的方式编码
package cn.sengtang.valuestack_ognl.web.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;

public class FooAction extends ActionSupport {
private Logger logger = LoggerFactory.getLogger(FooAction.class);

@Override
public String execute() throws Exception {
String msg="debug level logger Info";
logger.debug(msg);
return super.execute();
}
}
以下看看LoggerFactory.getLogger();方法的实现
getLoggerFactory().getLoggerImpl(cls);
而getLoggerFactory()的核心代码为
if (factory == null) {
                try {
                    Class.forName("org.apache.commons.logging.LogFactory");
                    factory = new com.opensymphony.xwork2.util.logging.commons.CommonsLoggerFactory();
                } catch (ClassNotFoundException ex) {
                    // commons logging not found, falling back to jdk logging
                    factory = new JdkLoggerFactory();
                }
}
显然,在Struts2的getLoggerFactory中有两种选择:Apache的CommonLogging 和JdkLoggerFactory,在前者不行的情况下将选择后者。
如何使用CommonLogger则其默认的LogFactory也会按照先后顺序决定使用哪个Log实现
References:commons-logging-1.1.1/site/guide.html#Quick Start
Look for a configuration attribute of this factory named org.apache.commons.logging.Log (for backwards compatibility to pre-1.0 versions of this API, an attribute org.apache.commons.logging.log is also consulted). Configuration attributes can be set explicitly by java code, but they are more commonly set by placing a file named commons-logging.properties in the classpath. When such a file exists, every entry in the properties file becomes an "attribute" of the LogFactory. When there is more than one such file in the classpath, releases of commons-logging prior to 1.1 simply use the first one found. From release 1.1, each file may define a priority key, and the file with the highest priority is used (no priority definition implies priority of zero). When multiple files have the same priority, the first one found is used. Defining this property in a commons-logging.properties file is the recommended way of explicitly selecting a Log implementation.
Look for a system property named org.apache.commons.logging.Log (for backwards compatibility to pre-1.0 versions of this API, a system property org.apache.commons.logging.log is also consulted).
If the Log4J logging system is available in the application class path, use the corresponding wrapper class (Log4JLogger).
If the application is executing on a JDK 1.4 system, use the corresponding wrapper class (Jdk14Logger).
Fall back to the default simple logging wrapper (SimpleLog).
大意如下
查找factory的org.apache.commons.logging.Log属性(这个API与1.0之前的版本是向后兼容的).可以通过Java代码对配置属性进行明确的设置,但更通用的方式是在classpath(类路径下)放置一个commons-logging.properties属性文件 。
查找名为org.apache.commons.logging.Log的系统属性
如果Log4j 日志系统在应用程序的类路径下是可用,则使用对用的包装器类Log4jLogger
如果应用程序运行在JDK1.4上,使用对应的包装器类Jdk14Logger
最后回退到使用默认的简单日志包装器SimpleLog
我们可以利用Common-Logger查找日志记录器的第3条原则,直接将Log4 的jar放到项目的Classpath中
并配置Log4j的log4j.properties就可以了
log4j.rootLogger=warn, stdout
log4j.logger.cn.sengtang=debug
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

那Struts2又是如何加载LoggerFactory的呢?
StrutsPrepareAndExecuteFilter中init方法的关键代码为
InitOperations init = new InitOperations();init.initLogging(config);
InitOperations.initLogging()的关键代码为:
String factoryName = filterConfig.getInitParameter("loggerFactory");
Class cls = ClassLoaderUtils.loadClass(factoryName, this.getClass());
LoggerFactory fac = (LoggerFactory) cls.newInstance();
LoggerFactory.setLoggerFactory(fac);
以下代码显示,Struts会通过名为loggerFactory的参数加载LoggerFactory,
则可以通过在web.xml中设置
<filter>
<filter-name>strut2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>loggerFactory</param-name>
<param-value>
com.opensymphony.xwork2.util.logging.commons.CommonsLoggerFactory
</param-value>
</init-param>
</filter>
以上的请求过程,用序列图表示为:
可以直接将附件中的WAR部署,访问http://localhost:8080/struts2logger/Foo查看控制台的日志消息
源码包为struts2logger.rar
tomcat下struts2的log4j日志配置.doc 立即下载

相关推荐

银河麒麟v10(x86_64)升级openssh实操成功

本文详细介绍了在银河麒麟V10系统上将OpenSSH从8.2p1升级至9.9p2版本的全过程。主要内容包括:系统环境确认、安装telnet备用连接、备份配置、卸载旧版本、安装新版本、服务配置与验证等关键步骤。特别强调了安全注意事项,如必须安装telnet作为备用连接、重要配置备份等。升级后提供了安全加固建议,包括修改SSH端口、禁用root登录等。文章还包含详细的故障排查方法和恢复方案,确保升级过程安全可靠。通过本教程,用户可以顺利完成OpenSSH版本升级,提升系统安全性。

淘淘小窝 1089

struts2拦截器管理日志

1:struts配置 /main/prot/list.jsp /main/cs/list.jsp /main/cs/edit.jsp /main/cs/info.jsp /main/ad/protinfo.jsp /logout.html ...

wawa129的专栏 197

Xilinx GTY Transceiver时钟方案与功耗优化实践

本文详细解析了Xilinx GTY Transceiver的时钟方案设计与功耗优化实践,涵盖从基础配置到高速24.33024Gbps和中速10.1376Gbps的实战案例。通过Transceivers Wizard的IP设计技巧和动态功耗优化方法,帮助工程师有效降低FPGA系统功耗,提升高速串行通信的稳定性与效率。

weixin_28736355的博客 228

struts2.5.30系统添加操作日志

struts2.5.30添加操作日志

qq3892997的博客 454

华为od 面试八股文_Python_02_含答案

华为od 面试八股文_Python_02_含答案

MISAYAONE的博客 4533

电脑硬件:电脑主板上的接口介绍,看完你就懂了

它们主要用于连接老式的键盘和鼠标,虽然速度和兼容性不如USB接口,但在某些特定场合依然发挥着重要作用。PCIe接口是主板上的扩展能力象征,可以连接各种扩展卡,如显卡、声卡、网卡等。电脑主板作为电脑硬件组成关键的部分,今天给大家分享一下电脑主板上有哪些接口,具体每一个接口的特点、使用场景,有需要的朋友可以来了解一下!它们不仅能连接鼠标、键盘、U盘、打印机,还能连接各种外设,如移动硬盘、游戏手柄等。:虽然现在用得越来越少,但在一些特定场合,如工业控制、老旧设备上,仍然需要使用PS/2接口。

IT技术分享社区 2787

Spring5.0整合slf4j+logback日志管理

目录结构

qq_47155275的博客 1720

《YOLOv8:从入门到实战》专栏介绍 & 专栏目录

本专栏涵盖了丰富的YOLOv8算法从入门到实战系列教程,专为学习YOLOv8的同学而设计,堪称全网最详细的教程!🌈🌈🌈

小哥谈 6489

Struts 2.5版本依赖备忘及spring整合注意点

在使用Struts 2.5版本时,遇到两个问题: 1. web.xml中配置的 SturtsPrepareAndExecuteFilter 时直接报错 2. 启动tomcat时,一直提示filter启动不了 回答: 1. 报错是因为,新版本中已经没有了ng包,因此filter-class中填写 org.apache.struts2.dispatcher.filter.Struts...

AlphaBINGOD 3925

解码器选型参数,结构原理,工艺与注意问题总结

解码器芯片(Decoder Chip)是电子设备中的一个重要组件,通常用于处理、解释和输出存储在某种编码格式中的数据或信号。本文对解码器的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1170

轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)

C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 363

Struts2框架下Log4j2漏洞检测方法分析与总结

Log4j2漏洞出现有大半年的时间了,这个核弹级别的漏洞危害很大,但是这个漏洞检测起来却很麻烦,因为黑盒测试无法预判网站哪个应用功能在后台调用了log4j2记录日志功能。目前通用的做法就是使用burpsuite插件进行被动扫描,原理就是把所有与用户交互参数都用各种log4j2检测payload测试一遍,然后观察DNSlog中有没有访问记录。这个漏洞检测方法和SQL注入、XSS漏洞有点像,常规方法很难完全发现漏洞,有时候就连研发人员自己也搞不清楚哪些应用功能点调用了log4j2,

A1_3_9_7的博客 1070

基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95

三个文件搞定YOLOv8【训练】【验证】【推理】🚀🚀🚀

Coding... 2万+

Struts2框架下Log4j2漏洞检测方法分析与总结!!!

Log4j2漏洞出现有大半年的时间了,这个核弹级别的漏洞危害很大,但是这个漏洞检测起来却很麻烦,因为黑盒测试无法预判网站哪个应用功能在后台调用了log4j2记录日志功能。目前通用的做法就是使用burpsuite插件进行被动扫描,原理就是把所有与用户交互参数都用各种log4j2检测payload测试一遍,然后观察DNSlog中有没有访问记录。这个漏洞检测方法和SQL注入、XSS漏洞有点像,常规方法很难完全发现漏洞,有时候就连研发人员自己也搞不清楚哪些应用功能点调用了log4j2,

logic1001的博客 1071

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Struts2 日志原理及配置方法

Struts2没有直接使用Log4j、JCL(Apache Java Commons Logger)或slf4j。 它编写了自己的LoggerFactory(com.opensymphony.xwork2.util.logging.LoggerFactory),然后让其选择使用何种LoggerFactory,然后再进行日志处理。   在action中使用,可以按照以下的方式编码:   ...

iteye_2186的博客 443

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

第14篇:Struts2框架下Log4j2漏洞检测方法分析与总结

Part1 前言Log4j2漏洞出现有大半年的时间了,这个核弹级别的漏洞危害很大,但是这个漏洞检测起来却很麻烦,因为黑盒测试无法预判网站哪个应用功能在后台调用了log4j2记录日志功能。目前通用的做法就是使用burpsuite插件进行被动扫描,原理就是把所有与用户交互参数都用各种log4j2检测payload测试一遍,然后观察DNSlog中有没有访问记录。这个漏洞检测............

ABC_123的技术博客 2287

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Struts2配合Log4j打印异常栈信息

struts2配合log4j打印异常栈信息   关于配置struts2全局异常后控制台无法打印异常信息问题           /exception/error.jsp                                    配置完后,action中不try catch则无法在控制台打印异常信息。   多次尝试后解决方案如下: 在struts2中

单眼皮的心情之技术空间 4136

struts2异常日志记录

struts2配合log4j打印异常栈信息 关于配置struts2全局异常后控制台无法打印异常信息问题 [html] view plaincopy   &lt;global-results&gt;         &lt;result name="error"&gt;/exception/error.jsp&lt;/result&gt;     &lt;/glob...

水之湄 507

struts2源码解析一 Struts2 日记原理及配置方法

转自:http://www.myexception.cn/software/1518737.html Struts2 日志原理及配置方法 Struts2没有直接使用Log4j、JCL(Apache Java Commons Logger)或slf4j。 它编写了自己的LoggerFactory(com.opensymphony.xwork2.util.logging.LoggerFa

xyy511的专栏 694

struts2配合log4j打印异常栈信息

struts2配合log4j打印异常栈信息 关于配置struts2全局异常后控制台无法打印异常信息问题 /exception/error.jsp 配置完后,action中不try catch则无法在控制台打印异常信息。   多次尝试后解决方案如下: 在struts2中的defaultStack拦截器中配置

h554645585的专栏 2449
上一篇: log4j日志输出性能优化-缓存、异步
下一篇: js上传文件
subuser
博客等级 码龄19年 31粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值