有沒有辦法改變logback使用dbAppender將其數據寫入到的表的方法,它有三個必須在使用dbAppender之前創建的默認表,但我想定製它以寫入一個表我的選擇。類似於Log4J,我可以指定將日誌插入數據庫時執行的SQL。Logback dbAppender自定義SQL
回答
您需要實現ch.qos.logback.classic.db.names.DBNameResolver
,並在配置中使用它:
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<dbNameResolver class="com.example.MyDBNameResolver"/>
<!-- ... -->
</appender>
嗨,謝謝你的回答,你知道哪裏有這個實現的例子,我已經實現了DBNameresolver,但我不知道這些方法需要什麼和什麼他們回來了。 – Magezy
默認情況下,此類採用'ch.qos.logback.classic.db.names.ColumnName'的實例並返回每個枚舉值的名稱。查看Logback發行版中的兩個可用實現。請提交問題以記錄此功能。 –
托馬斯,也許我失去了一些東西,但我不知道如何只使用自定義的DBNameResolver可能是答案什麼Magezy問。 DBNameResolver由DBAppender通過SQLBuilder使用來構造3個SQL插入查詢 - 通過DBNameResolve,只能影響將要插入數據的表和列的名稱,但不能限制插入到一個表中,更不用說只通過在那裏實現DBNameResolver無法控制實際插入的內容。
要匹配log4j的JDBCAppender IMO,必須擴展logback的DBAppender或DBAppenderBase,或者甚至可以實現全新的自定義Appender。
對我來說最簡單的方法是從頭開始製作一個appender。我使用Spring JDBC附加到單個表。它的工作原理是這樣的:
public class MyAppender extends AppenderBase<ILoggingEvent>
{
private String _jndiLocation;
private JDBCTemplate _jt;
public void setJndiLocation(String jndiLocation)
{
_jndiLocation = jndiLocation;
}
@Override
public void start()
{
super.start();
if (_jndiLocation == null)
{
throw new IllegalStateException("Must have the JNDI location");
}
DataSource ds;
Context ctx;
try
{
ctx = new InitialContext();
Object obj = ctx.lookup(_jndiLocation);
ds= (DataSource) obj;
if (ds == null)
{
throw new IllegalStateException("Failed to obtain data source");
}
_jt = new JDBCTemplate(ds);
}
catch (Exception ex)
{
throw new IllegalStateException("Unable to obtain data source", ex);
}
}
@Override
protected void append(ILoggingEvent e)
{
// log to database here using my JDBCTemplate instance
}
}
我遇到了麻煩與SLF4J - 這裏所描述的替代記錄錯誤: http://www.slf4j.org/codes.html#substituteLogger
This thread on multi-step configuration使我能夠解決這個問題。
<appender name="CUSTOM_DB_APPENDER" class="com.....MyDbAppender">
<filter class="com......MyFilter"/>
<param name="jndiLocation" value="java:/comp/env/jdbc/....MyPath"/>
</appender>
而你的java MyDbAppender應該有setter字符串jndiLocation。 現在做一個jndi查找(請參閱解決方案在十月17 '11在16:03回答)
- 1. Logback DBAppender url
- 2. logback dbappender性能
- 3. 具有logback的異步DBAppender
- 4. 我可以防止logback的DBAppender記錄特定的屬性嗎?
- 5. 自定義logback appender的自定義列表屬性
- 6. 從自定義logback appender使用Spring?
- 7. logback自定義日誌級別處理
- 8. Logback DBAppender,配置編程方式拋出異常
- 9. 如何使用HikariDataSource在logBack中配置DBappender的池大小?
- 10. 自定義SQL SELECT
- 11. SQL自定義列
- 12. Linq自定義sql
- 13. 將sqldialect設置爲logback db appender programaticaly
- 14. 的java的logback自定義記錄器名稱
- 15. 複雜的logback自定義佈局屬性
- 16. Logback無法找到自定義配置文件(FileNotFoundException)
- 17. 在Spring Boot中定義logback shutdown hook
- 18. DBAppender - 如何更改默認表名稱?
- 19. SQL自定義選擇
- 20. 的Sql自定義聲明
- 21. Liquibase回滾自定義SQL
- 22. 自定義SQL查詢
- 23. Liquibase:自定義SQL語句
- 24. Sql Server自定義異常
- 25. CActiveDataProvider用自定義的SQL
- 26. 自定義選擇與SQL
- 27. SQL自定義排序
- 28. yii1 CGridview自定義SQL
- 29. Gridview中的自定義SQL
- 30. 如何在JBoss5中用log4j設置DBAppender?
可能重複[DBAppender - 如何更改默認表名稱?](http://stackoverflow.com/questions/4690381/dbappender-how-to-change-default-table-names) –