问题描述
这是我的log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true"> <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${catalina.base}/logs/server.log" /> <param name="Append" value="true" /> <param name="Threshold" value="INFO" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE}#%X{requestId}#%X{uid}#%X{agentId}#%X{agentName} %-5p [%c{1}] - %m%n" /> </layout> </appender> <logger name="org.springframework" level="DEBUG"> <appender-ref ref="FILE"/> </logger>
我正在向控制器提出JSON请求,并获得400 Bad request request is syntactically incorrect.我想获得有关此的更多信息.我阅读了有关启用春季调试的信息,并遵循说明,但行不通.我已经检查了我的请求,这似乎很好.我如何在server.log文件中查看有关此信息的更多信息?为什么上述配置不起作用? PS:我已经删除了其他记录仪和附录,以确保清晰度
推荐答案
这修复了
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <!-- Rolling file Appender --> <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${catalina.base}/logs/server.log" /> <param name="Append" value="true" /> <!-- changed to DEBUG--> <param name="Threshold" value="DEBUG" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE}#%X{requestId}#%X{uid}#%X{agentId}#%X{agentName} %-5p [%c{1}] - %m%n" /> </layout> </appender> <!-- added this--> <category name="org.springframework.beans"> <priority value="debug" /> </category>
其他推荐答案
这是依赖项:
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.1' compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.1'
这是log4j2配置:
波纹配置适用于Windows机器.您只能更改Linux的日志路径.
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn" strict="true"> <Properties> <Property name="filename">D:/CommonLogFile/YOUR_LOG_FILE_NAME.log </Property> <Property name="backupFilePattern"> D:/CommonLogFile/PROJECT_NAME-%d{yyyy-MM-dd HH_mm}-%i.log </Property> <Property name="logPatternConsole"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight{%-5level} %logger{35} - %msg%n{INFO=cyan, ERROR=red} </Property> <Property name="logPatternFile"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n </Property> </Properties> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="${logPatternConsole}"/> </Console> <RollingFile name="MyRollingFile" fileName="${filename}" filePattern="${backupFilePattern}"> <PatternLayout pattern="${logPatternFile}"/> <Policies> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile> </Appenders> <Loggers> <Logger name="com.project" level="trace" additivity="false"> <AppenderRef ref="STDOUT"/> <AppenderRef ref="MyRollingFile"/> </Logger> <Root level="trace"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration>
这里包含一些主题演讲:
<Property name="filename">D:/CommonLogFile/YOUR_LOG_NAME.log </Property>
在这里,filename是日志文件的名称.
<Property name="logPatternConsole"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight{%-5level} %logger{35} - %msg%n{INFO=cyan, ERROR=red} </Property>
在这里,logPatternConsole具有时间模式.
在Appender部分中,它具有
<Policies> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies>
there SizeBasedTriggeringPolicy defins何时创建新的日志文件.在这里, 10MB 它将创建新的logfile
这是日志实现:
static LogWriterUtility logWriterUtility = new LogWriterUtility(YOUR_CLASS_NAME.class); logWriterUtility.trace(UUID.randomUUID().toString(),"Here is the log message");
检查LogWriterUtility类:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class LogWriterUtility { Logger log; public LogWriterUtility(Class<?> clazz) { log = LogManager.getLogger(clazz); } public void trace(String requestId, String message) { log.trace("REQUESTID:" + requestId + ":" + message); } public void debug(String requestId, String message) { log.debug("REQUESTID:" + requestId + ":" + message); } public void error(String requestId, String message) { log.error("REQUESTID:" + requestId + ":" + message); } public void error(String requestId, Throwable t) { log.error("REQUESTID:" + requestId + ":"); log.error(t); } public void info(String requestId, String message) { log.info("REQUESTID:" + requestId + ":" + message); } public void error(String requestId, Exception exception) { log.warn("REQUESTID:" + requestId + ":" + exception.getStackTrace()); } public void errorWithAnalysis(String requestId, Exception exception) { if(exception==null) return; String message="No Message on error"; StackTraceElement[] stackTrace = exception.getStackTrace(); if(stackTrace!=null && stackTrace.length>0) { message=""; for (StackTraceElement e : stackTrace) { message += "\n" + e.toString(); } } log.error("REQUESTID:" + requestId + ":" +message); } public void warn(String requestId, String message) { log.error(requestId,message); } public boolean isTraceEnabled() { return log.isTraceEnabled(); } }
谢谢:)
问题描述
This is my log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true"> <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${catalina.base}/logs/server.log" /> <param name="Append" value="true" /> <param name="Threshold" value="INFO" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE}#%X{requestId}#%X{uid}#%X{agentId}#%X{agentName} %-5p [%c{1}] - %m%n" /> </layout> </appender> <logger name="org.springframework" level="DEBUG"> <appender-ref ref="FILE"/> </logger>
I am making a JSON request to a controller and getting 400 Bad request request is syntactically incorrect. I want to get some more info on this. I read about enabling spring debugging and followed instructions but it doesn't work. I have checked my request and it seems completely fine. How can I see more information about this in server.log file? Why does the above configuration not work? PS: I have removed the other loggers and appenders for clarity
推荐答案
This fixed it
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <!-- Rolling file Appender --> <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${catalina.base}/logs/server.log" /> <param name="Append" value="true" /> <!-- changed to DEBUG--> <param name="Threshold" value="DEBUG" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE}#%X{requestId}#%X{uid}#%X{agentId}#%X{agentName} %-5p [%c{1}] - %m%n" /> </layout> </appender> <!-- added this--> <category name="org.springframework.beans"> <priority value="debug" /> </category>
其他推荐答案
Here is the dependencies:
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.1' compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.1'
Here is the log4j2 configuration:
Bellow configuration is for windows machine. You can change only the log path for linux.
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="warn" strict="true"> <Properties> <Property name="filename">D:/CommonLogFile/YOUR_LOG_FILE_NAME.log </Property> <Property name="backupFilePattern"> D:/CommonLogFile/PROJECT_NAME-%d{yyyy-MM-dd HH_mm}-%i.log </Property> <Property name="logPatternConsole"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight{%-5level} %logger{35} - %msg%n{INFO=cyan, ERROR=red} </Property> <Property name="logPatternFile"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n </Property> </Properties> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="${logPatternConsole}"/> </Console> <RollingFile name="MyRollingFile" fileName="${filename}" filePattern="${backupFilePattern}"> <PatternLayout pattern="${logPatternFile}"/> <Policies> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies> <DefaultRolloverStrategy max="10"/> </RollingFile> </Appenders> <Loggers> <Logger name="com.project" level="trace" additivity="false"> <AppenderRef ref="STDOUT"/> <AppenderRef ref="MyRollingFile"/> </Logger> <Root level="trace"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration>
Here contains some keyNote:
<Property name="filename">D:/CommonLogFile/YOUR_LOG_NAME.log </Property>
Here, filename is the name of the log file.
<Property name="logPatternConsole"> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight{%-5level} %logger{35} - %msg%n{INFO=cyan, ERROR=red} </Property>
Here, logPatternConsole has the time pattern.
In Appender section, it has
<Policies> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies>
here SizeBasedTriggeringPolicy defins when new log file will created. Here, after 10MB it will create new logFile
Here is the log implementation:
static LogWriterUtility logWriterUtility = new LogWriterUtility(YOUR_CLASS_NAME.class); logWriterUtility.trace(UUID.randomUUID().toString(),"Here is the log message");
Check bellow for LogWriterUtility class:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class LogWriterUtility { Logger log; public LogWriterUtility(Class<?> clazz) { log = LogManager.getLogger(clazz); } public void trace(String requestId, String message) { log.trace("REQUESTID:" + requestId + ":" + message); } public void debug(String requestId, String message) { log.debug("REQUESTID:" + requestId + ":" + message); } public void error(String requestId, String message) { log.error("REQUESTID:" + requestId + ":" + message); } public void error(String requestId, Throwable t) { log.error("REQUESTID:" + requestId + ":"); log.error(t); } public void info(String requestId, String message) { log.info("REQUESTID:" + requestId + ":" + message); } public void error(String requestId, Exception exception) { log.warn("REQUESTID:" + requestId + ":" + exception.getStackTrace()); } public void errorWithAnalysis(String requestId, Exception exception) { if(exception==null) return; String message="No Message on error"; StackTraceElement[] stackTrace = exception.getStackTrace(); if(stackTrace!=null && stackTrace.length>0) { message=""; for (StackTraceElement e : stackTrace) { message += "\n" + e.toString(); } } log.error("REQUESTID:" + requestId + ":" +message); } public void warn(String requestId, String message) { log.error(requestId,message); } public boolean isTraceEnabled() { return log.isTraceEnabled(); } }
Thanks :)