我的问题是如何使用log4j2将日志存储在不同的表中。我以不同的方式对日志进行分类,即事务日志、异常日志和审核日志。我在Sqlserver-2008中创建了三个表,如Transaction_log、Exception_log和Audit_Logs。目前,所有日志仅存储在 Transaction_log 表中。现在我想将所有错误日志存储在 Exception_log 表中,所有信息日志存储在 Transaction_log 表中。如何使用 log4j2.xml 配置文件进行分类,我正在将 slf4j 与 log4j2 一起使用。如果有人有想法,请与我分享。在我使用 log4j 1.x 属性文件进行此开发之前。log4j1.x 属性文件是:
# Define the root logger with appender file
log4j.rootLogger =ALL,TXN, EXP,CONSOLE
log4j.category.TransactionLog=INFO, TXN
log4j.additivity.TransactionLog=false
log4j.category.ExceptionLog=ERROR,EXP
log4j.additivity.ExceptionLog=false
#CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%d{MMM dd HH:mm:ss}] %-5p (%F:%L) - %m%n
#Transaction log config details
log4j.appender.TXN=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.TXN.URL=jdbc:sqlserver://SERVERname;databaseName=******
log4j.appender.TXN.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
log4j.appender.TXN.user=*****
log4j.appender.TXN.password=****
log4j.appender.TXN.sql=INSERT INTO Transaction_Log(LoggedDate, MethodName, Level, ClassName, Message) VALUES (GETDATE(),'%M()', '%-5p', '%C---%L','- %m%n' )
#Exception log config details
log4j.appender.EXP=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.EXP.URL=jdbc:sqlserver://SERVERname;databaseName=******
# Set Database Driver
log4j.appender.EXP.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
log4j.appender.EXP.user=****
log4j.appender.EXP.password=*****
log4j.appender.EXP.sql=INSERT INTO Exception_Log(LoggedDate, MethodName, Level, ClassName, Message) VALUES (GETDATE(),'%M()', '%-5p', '%C---%L','- %m%n' )
现在我需要像这样log4j2.xml。
我的 log4j.xml 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</Console>
<JDBC name="databaseAppender" tableName="Transaction_Log">
<DataSource jndiName="java:/comp/env/jdbc/TestDB" />
<Column name="LoggedDate" isEventTimestamp="true" />
<Column name="MethodName" pattern="%M()" />
<Column name="level" pattern="%level" isUnicode="false" />
<Column name="ClassName" pattern="%logger" isUnicode="false" />
<Column name="message" pattern="%m%n" isUnicode="false" />
</JDBC>
</appenders>
<loggers>
<Logger name="org.apache.log4j.xml" level="all"/>
<root level="all">
<appender-ref ref="databaseAppender"/>
<appender-ref ref="STDOUT"/>
</root>
</loggers>
</configuration>
最佳答案
根记录器可以有多个appender-ref,每个都有不同的级别。一个简单的例子:
<JDBC name="allEventsDatabaseAppender" tableName="tracedebuginfowarn_LOG">
<Filters>
<!-- Now deny error and fatal messages -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<DataSource jndiName="java:/comp/env/jdbc/TestDB" />
...
</JDBC>
...
<Root level="all">
<AppenderRef ref="errorOnlyDatabaseAppender" level="ERROR" />
<AppenderRef ref="allEventsDatabaseAppender" level="TRACE" />
<AppenderRef ref="STDOUT"/>
</Root>
...
关于java - 如何使用log4j2和slf4j将日志存储在不同的日志表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28630030/