Skip to content

Commit

Permalink
update to new logging API
Browse files Browse the repository at this point in the history
  • Loading branch information
coolya committed Jan 20, 2023
1 parent e286b8b commit 03cb48f
Show file tree
Hide file tree
Showing 10 changed files with 163 additions and 77 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ gradle-app.setting

# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
# gradle/wrapper/gradle-wrapper.properties
.DS_Store
6 changes: 6 additions & 0 deletions .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

65 changes: 65 additions & 0 deletions .idea/libraries-with-intellij-classes.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 6 additions & 8 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,17 @@

## [Unreleased]

Compatibility with Projector
Use new IntelliJ Logging API

### Added
- Remove log4j implementation
- Use `java.util.logging` to intercept the logs

### Changed
- User classes instrumented by Projector to open the browser.
### Deprecated
## [1.1]

### Removed
Compatibility with Projector

### Fixed
- User classes instrumented by Projector to open the browser.

### Security

## [1.0]

Expand Down
20 changes: 10 additions & 10 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
import org.jetbrains.changelog.closure
import org.jetbrains.changelog.date
plugins {
id("org.jetbrains.intellij") version "0.6.5"
kotlin("jvm") version "1.4.21"
id("org.jetbrains.intellij") version "1.4.0"
kotlin("jvm") version "1.6.21"
id("org.jetbrains.changelog") version "0.6.2"
}

group = "ws.logv"
version = "1.1"
version = "1.2"

repositories {
mavenCentral()
}

dependencies {
implementation(kotlin("stdlib"))
implementation("org.apache.logging.log4j:log4j-core:2.11.0")
}

// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
version = "2019.3"
version.set("2022.2")
}


Expand All @@ -36,21 +35,22 @@ changelog {
}

tasks.getByName<org.jetbrains.intellij.tasks.PatchPluginXmlTask>("patchPluginXml") {
changeNotes(closure { changelog.getUnreleased().toHTML() })
untilBuild(null)
changeNotes.set(changelog.getUnreleased().toHTML())
untilBuild.set("")
}


tasks.getByName<org.jetbrains.intellij.tasks.RunPluginVerifierTask>("runPluginVerifier") {
ideVersions(listOf("MPS-2020.2.3", "MPS-2020.1.7", "MPS-2019.3.7", "IIC-2020.3", "ICC-2020.2.4", "ICC-2020.1.4"))
ideVersions.set(listOf("MPS-2020.2.3", "MPS-2020.1.7", "MPS-2019.3.7", "IIC-2020.3", "ICC-2020.2.4", "ICC-2020.1.4"))
}

val jb_token: String? by project

tasks.getByName<org.jetbrains.intellij.tasks.PublishTask>("publishPlugin") {
token(jb_token)
tasks.getByName("buildSearchableOptions") {
enabled = false
}


tasks.register("printVersion") {
doLast {
println(project.version)
Expand Down
28 changes: 0 additions & 28 deletions src/main/kotlin/RootHtmlPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,32 +40,4 @@ class RootPageHandler : HttpRequestHandler() {
val data = IOUtils.toByteArray(RootPageHandler::class.java.getResourceAsStream(resourceName))
return sendData(data, resourceName, request, context.channel(), request.headers())
}

private fun sendData(content: ByteArray, name: String, request: FullHttpRequest, channel: Channel, extraHeaders: HttpHeaders): Boolean {
val response = DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK)
response.headers().set(HttpHeaderNames.CONTENT_TYPE, FileResponses.getContentType(name))
response.addCommonHeaders()
response.headers().set(HttpHeaderNames.CACHE_CONTROL, "private, must-revalidate") //NON-NLS
response.headers().set(HttpHeaderNames.LAST_MODIFIED, Date(Calendar.getInstance().timeInMillis))
response.headers().add(extraHeaders)

val keepAlive = response.addKeepAliveIfNeeded(request)
if (request.method() != HttpMethod.HEAD) {
HttpUtil.setContentLength(response, content.size.toLong())
}

channel.write(response)

if (request.method() != HttpMethod.HEAD) {
val stream = ByteArrayInputStream(content)
channel.write(ChunkedStream(stream))
stream.close()
}

val future = channel.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT)
if (!keepAlive) {
future.addListener(ChannelFutureListener.CLOSE)
}
return true
}
}
51 changes: 24 additions & 27 deletions src/main/kotlin/WebSocketLogForwarder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,32 @@ import io.netty.handler.codec.http.HttpMethod
import io.netty.handler.codec.http.QueryStringDecoder
import io.netty.handler.codec.http.websocketx.*
import io.netty.util.ReferenceCountUtil
import org.apache.log4j.AppenderSkeleton
import org.apache.log4j.LogManager
import org.apache.log4j.spi.LoggingEvent
import org.jetbrains.ide.HttpRequestHandler
import org.jetbrains.ide.RestService
import org.jetbrains.io.BuiltInServer
import org.jetbrains.io.NettyUtil
import java.nio.channels.ClosedChannelException
import java.util.logging.Handler
import java.util.logging.LogRecord


@Suppress("UnstableApiUsage")
class LogAppender(
private val reqHandler: WebSocketLogForwarder
) :
AppenderSkeleton() {

override fun close() {
) : Handler() {

override fun publish(record: LogRecord?) {
if(record != null) {
reqHandler.logMsg(record)
}
}

override fun requiresLayout(): Boolean {
return false
override fun flush() {
//noop
}

override fun append(event: LoggingEvent) {
reqHandler.logMsg(event)
override fun close() {
//noop
}
}

Expand All @@ -60,6 +61,7 @@ class WebSocketChannelAdapter(val messageReceived: (TextWebSocketFrame, Channel)
closed()
ctx.channel().close()
}

is TextWebSocketFrame -> messageReceived(msg, ctx.channel())
else -> throw UnsupportedOperationException("${msg.javaClass.name} type not supported")
}
Expand All @@ -70,25 +72,24 @@ class WebSocketLogForwarder : HttpRequestHandler() {

init {
val appender = LogAppender(this)
LogManager.getRootLogger().addAppender(appender)
java.util.logging.Logger.getLogger("").addHandler(appender)
}

private val connectedClients = mutableListOf<WebSocketClient>()

fun logMsg(event: LoggingEvent) {
fun logMsg(event: LogRecord) {
val out = BufferExposingByteArrayOutputStream()
val writer = RestService.createJsonWriter(out)

writer.beginObject()
@Suppress("DEPRECATION")
writer.name("level").value(event.level.toString())
writer.name("message").value(event.renderedMessage)
writer.name("time").value(event.timeStamp)
writer.name("message").value(event.message)
writer.name("time").value(event.millis)
writer.name("logger").value(event.loggerName)
if (event.throwableStrRep != null) {
if (event.thrown != null) {
writer.name("stacktrace").beginArray()
event.throwableStrRep.forEach {
writer.value(it)
event.thrown.stackTrace.forEach {
writer.value(it.toString())
}
writer.endArray()
}
Expand All @@ -98,11 +99,9 @@ class WebSocketLogForwarder : HttpRequestHandler() {
}

override fun isSupported(request: FullHttpRequest): Boolean {
return request.method() === HttpMethod.GET &&
"WebSocket".equals(
request.headers().getAsString(HttpHeaderNames.UPGRADE),
ignoreCase = true
) && request.uri().startsWith("/fernsprecher/logs")
return request.method() === HttpMethod.GET && "WebSocket".equals(
request.headers().getAsString(HttpHeaderNames.UPGRADE), ignoreCase = true
) && request.uri().startsWith("/fernsprecher/logs")
}

private fun messageReceived(client: WebSocketClient, frame: TextWebSocketFrame, channel: Channel) {
Expand All @@ -114,9 +113,7 @@ class WebSocketLogForwarder : HttpRequestHandler() {
}

override fun process(
urlDecoder: QueryStringDecoder,
request: FullHttpRequest,
context: ChannelHandlerContext
urlDecoder: QueryStringDecoder, request: FullHttpRequest, context: ChannelHandlerContext
): Boolean {

val factory = WebSocketServerHandshakerFactory(
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/ws/logv/fernsprecher/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,10 @@ <h1>Fernsprecher</h1>
</div>
</div>
<div id="logs">
<!--<div id="filters">
<input type="search"> <input type="button" value="add">
</div>-->

<table id="logs-table">
<thead>
<tr>
Expand Down
Loading

0 comments on commit 03cb48f

Please sign in to comment.