Log4j JDBCAppender用于记录stacktraces

Mik*_*son 2 log4j jdbc stack-trace

使用org.apache.log4j.jdbc.JDBCAppender,我怎样才能记录warnerror使用PatternLayout.

我正在登录

logger.warn("warning description", e);
logger.error("error description", e);
Run Code Online (Sandbox Code Playgroud)

我将String描述放入表中,但Throwable的堆栈跟踪现在在哪里.是否有其他参数可以通过PatternLayout.目前我正在使用

"INSERT INTO app_logs (app, log_date, log_level, location, loc, message) VALUES ('my-apps-name', '%d{ISO8601}','%p', '%C.java', '%C{1}.java:%L', '%m')" 
Run Code Online (Sandbox Code Playgroud)

进入一张桌子

TABLE `app_logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `app` varchar(255) DEFAULT NULL,
  `log_date` varchar(255) DEFAULT NULL,
  `log_level` varchar(255) DEFAULT NULL,
  `location` varchar(255) DEFAULT NULL,
  `loc` varchar(255) DEFAULT NULL,
  `message` text, 
  PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 11

我找到了解决方案.

PatternLayout类替换EnhancedPatternLayout类.

org.apache.log4j.EnhancedPatternLayout

您还需要包含apache-log4j-extra依赖项

或者将它包含在你的pom中:

<dependency>
  <groupId>log4j</groupId>
  <artifactId>apache-log4j-extras</artifactId>
  <version>1.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

您现在可以访问%throwable

%throwable{short}%throwable{1}将输出堆栈跟踪的第一行. throwable{none}或者throwable{0}将抑制堆栈跟踪. %throwable{n}如果是正整数,则输出n行堆栈跟踪;如果是负整数,则输出最后一行-n行.

我加入了我的桌子,

TABLE `app_logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `app` varchar(255) DEFAULT NULL,
  `log_date` varchar(255) DEFAULT NULL,
  `log_level` varchar(255) DEFAULT NULL,
  `location` varchar(255) DEFAULT NULL,
  `loc` varchar(255) DEFAULT NULL,
  `message` text,
  `throwable` text,
  `stacktrace` text,
  PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)

并更新了我的模式以填充这些列.

"INSERT INTO app_logs (app, log_date, log_level, location, loc, message, throwable, stacktrace) VALUES ('my-apps-name', '%d{ISO8601}','%p', '%C.java', '%C{1}.java:%L', '%m', '%throwable{short}', '%throwable{100}')"
Run Code Online (Sandbox Code Playgroud)