提示:WARN [com.opensymphony.xwork2.ognl.OgnlValueStack] - Error setting value ogn

本文介绍了一个常见的 Struts2 框架中出现的 OGNL NullPointerException 错误及其解决方法。该错误源于试图获取空对象的属性,通过调整 log4j 的配置级别可以有效避免不必要的警告日志输出。

提示:WARN [com .opensymphony .xwork2 .ognl .OgnlValueStack ] - Error setting value
ognl .OgnlException: source is null for getProperty(null, "book")
        at ognl .OgnlRuntime.getProperty(OgnlRuntime.java:1638)
        at ognl .ASTProperty.getValueBody(ASTProperty.java:92)
        at ognl .SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
        at ognl .SimpleNode.getValue(SimpleNode.java:210)
        at ognl .ASTChain.setValueBody(ASTChain.java:168)
        at ognl .SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
        at ognl .SimpleNode.setValue(SimpleNode.java:246)
        at ognl .Ognl .setValue(Ognl .java:476)
        at com .opensymphony .xwork2 .ognl .OgnlUtil.setValue(OgnlUtil.java:192)
        at com .opensymphony .xwork2 .ognl .OgnlValueStack .setValue(OgnlValueStack .java:155)
        at com .opensymphony .xwork2 .ognl .OgnlValueStack .setValue(OgnlValueStack .java:143)
        at com .opensymphony .xwork2 .interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:273)
        at com .opensymphony .xwork2 .interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
        at com .opensymphony .xwork2 .interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        at com .opensymphony .xwork2 .DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.
java:76)
        at com .sterning.commons.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:27)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

 

解决方法:

打开log4j.properties 加入:

log4j.logger.com .opensymphony .xwork2 =ERROR

 

<think>好的,用户的问题是关于在Spring Boot应用中配置不同包的日志级别,并指定logback-spring.xml作为配置文件。我需要先回忆一下相关的知识,然后结合提供的引用内容来组织答案。 首先,根据引用[1]和[2],Spring Boot默认会自动加载logback-spring.xml,放在src/main/resources下。所以用户需要确认文件的位置是否正确。然后,配置不同包的日志级别,这通常是在logback-spring.xml中使用<logger>元素,设置name属性为包名,level为所需的级别,比如DEBUG或INFO。 关于指定日志文件位置,引用[1]提到配置文件中的路径需要调整,确保权限正确。在logback-spring.xml中,可以定义<property>来指定路径,然后在<appender>里引用这个变量,比如${LOG_PATH}。同时,引用[3]提到了输出到文件的配置示例,比如使用RollingFileAppender,并设置file和fileNamePattern。 用户可能还关心如何分环境配置,根据引用[1],可以使用<springProfile>标签来处理不同环境,比如开发和生产环境的不同日志级别。需要提醒用户注意,如果使用logback-spring.xml而不是logback.xml,才能利用Spring的扩展功能。 另外,需要确保用户知道如何验证配置是否生效,比如启动应用时检查日志输出,或者查看生成的日志文件是否存在。可能还需要提到常见的错误,比如路径权限问题,或者配置文件名称错误导致Spring Boot无法加载。 总结步骤应该是:创建logback-spring.xml文件,配置包级别的日志记录器,设置日志文件路径,利用Spring Profile进行环境区分,最后测试配置是否正确应用。同时,引用提供的参考文献来支持每个步骤的正确性,比如引用[2]关于文件位置的说明,引用[1]关于自动加载和路径调整的建议,引用[3]中的配置示例。</think>### 如何在Spring Boot中配置日志级别和日志文件位置? #### 1. **确认配置文件位置** - 在 `src/main/resources` 目录下创建 `logback-spring.xml` 文件(Spring Boot优先加载此文件,支持Spring Profile配置)[^2]。 #### 2. **配置不同包的日志级别** 在 `logback-spring.xml` 中使用 `<logger>` 标签指定包路径和级别: ```xml <!-- 设置com.example包下的日志级别为DEBUG --> <logger name="com.example" level="DEBUG"/> <!-- 设置其他包的默认日志级别为INFO --> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> ``` #### 3. **指定日志文件路径** - 定义日志文件存储路径变量(如`${LOG_PATH}`)并在Appender中引用: ```xml <property name="LOG_PATH" value="/var/log/myapp"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/application.log</file> <!-- 滚动策略和格式配置 --> </appender> ``` 确保目标路径有写入权限[^1]。 #### 4. **按环境配置日志级别** 使用 `<springProfile>` 标签区分环境: ```xml <springProfile name="dev"> <logger name="com.example" level="TRACE"/> </springProfile> <springProfile name="prod"> <logger name="com.example" level="WARN"/> </springProfile> ``` #### 5. **验证配置** - 启动应用时检查日志输出格式和路径。 - 通过 `logging.level.com.example=DEBUG`(`application.properties`)覆盖配置(可选)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值