[
https://issues.apache.org/jira/browse/LOG4J2-1178?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14975005#comment-14975005
]
Gary Gregory commented on LOG4J2-1178:
--------------------------------------
My JDBC driver uses Log4j 2 internally, yes, so I've got that going for me,
which is nice. The driver is configured more or less normally, either with a
log4j2.xml file on the classpath, and so on, the usual Log4j way. Or, the
end-use can pass in a "LogConfiguration" property in a driver connection
string. For completeness' sake, If the user gives me a LogConfiguration in the
connect string I do:
{code:java}
protected void configure(final String configLocation) {
if (Strings.isNotBlank(configLocation)) {
Configurator.initialize(DvConstants.ROOT_PACKAGE, null,
Strings.toURI(configLocation));
}
}
{code}
Here is an example of a setLogWriter(PrintWriter) method that could be the
basis for my solution:
{code:java}
final LoggerContext context = LoggerContext.getContext(false);
final Configuration configuration = context.getConfiguration();
final PatternLayout layout =
PatternLayout.newBuilder().withConfiguration(configuration).build();
final Appender appender =
ConsoleAppender.createDefaultAppenderForLayout(layout);
configuration.addAppender(appender);
Configurator.initialize(configuration);
{code}
Instead of:
{code:java}
final Appender appender =
ConsoleAppender.createDefaultAppenderForLayout(layout);
{code}
I'd need:
{code:java}
final Appender appender =
PrintWriterAppender.createDefaultAppender(printWriter, layout);
{code}
(The "ForLayout" in the method name is superfluous.)
In fact, I am guessing that this appender would be a simpler version of the
current ConsoleAppender and would not need to be a Plugin.
> Support use-case for JDBC's DataSource.setLogWriter(PrintStream)
> ----------------------------------------------------------------
>
> Key: LOG4J2-1178
> URL: https://issues.apache.org/jira/browse/LOG4J2-1178
> Project: Log4j 2
> Issue Type: Bug
> Components: Appenders
> Environment: Apache Maven 3.3.3
> (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T04:57:37-07:00)
> Maven home: C:\Java\apache-maven-3.3.3\bin\..
> Java version: 1.7.0_79, vendor: Oracle Corporation
> Java home: C:\Program Files\Java\jdk1.7.0_79\jre
> Default locale: en_US, platform encoding: Cp1252
> OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
> Reporter: Gary Gregory
>
> I am writing a JDBC driver. The JDBC Spec has a a method
> [DataSource.setLogWriter(PrintStream)|https://docs.oracle.com/javase/8/docs/api/javax/sql/CommonDataSource.html#setLogWriter-java.io.PrintWriter-]
> API drivers should implement.
> Users can drop our driver into any tool that talks JDBC or write their own
> apps. In am concerned about the 'drop the driver anywhere' scenario, like in
> an Eclipse based tool; that may or may not use Eclipse DTP. Or anything else.
> The
> [setLogWriter()|https://docs.oracle.com/javase/8/docs/api/javax/sql/CommonDataSource.html#setLogWriter-java.io.PrintWriter-]
> API can be called at any time, after Log4j has initialized itself for
> example.
> I do all my driver logging through Log4j. If a tool calls
> [setLogWriter()|https://docs.oracle.com/javase/8/docs/api/javax/sql/CommonDataSource.html#setLogWriter-java.io.PrintWriter-],
> I'd like the given PrintStream to become an Appender such that Log4j output
> appears there.
> The only way I see to do that is through pseudo-code like
> "getLoggerContext().getConfiguration().addAppender(PrintStreamAppender.createPrintStreamAppender(aPrintStream))"
> I think that would need to be followed by a full reconfigure.
> Can we use our new builder API to add to the current config and reconfigure?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]