From 4eae972eeded9f69d8f0fa1dcc170b3107f30d9c Mon Sep 17 00:00:00 2001 From: Dag Brattli Date: Sun, 29 Mar 2026 15:57:36 +0200 Subject: [PATCH 1/2] feat: add update_handler_config and simplify add_primary_filter in Logger Add update_handler_config/3 binding for changing handler settings like formatter templates. Simplify add_primary_filter's filter parameter to obj since Erlang logger filters are {fun/2, term()} tuples typically constructed via []. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/otp/Logger.fs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/otp/Logger.fs b/src/otp/Logger.fs index 113f229..4a5fc3f 100644 --- a/src/otp/Logger.fs +++ b/src/otp/Logger.fs @@ -43,9 +43,10 @@ type IExports = abstract debug: msg: string * metadataOrArgs: obj -> unit /// Set the primary logger configuration. Common use: set_primary_config(atom "level", atom "debug") abstract set_primary_config: key: Atom * value: Atom -> unit - /// Add a primary filter. Filters run before handler filters and can stop or modify events. - /// The filter is a tuple {FilterFun, Extra} where FilterFun is fun(LogEvent, Extra) -> stop | ignore | LogEvent. - abstract add_primary_filter: id: Atom * filter: (System.Func * obj) -> unit + /// Update a handler's configuration. Common use: change formatter template. + abstract update_handler_config: handler: Atom * key: Atom * value: obj -> unit + /// Add a primary filter. The filter is an opaque {FilterFun, Extra} tuple. + abstract add_primary_filter: id: Atom * filter: obj -> unit /// logger module [] From 5c673dfb227b1361e7f9d4a2e6df80b3fa7458ab Mon Sep 17 00:00:00 2001 From: Dag Brattli Date: Sun, 29 Mar 2026 17:31:23 +0200 Subject: [PATCH 2/2] feat: add phash2 binding to Erlang module Co-Authored-By: Claude Opus 4.6 (1M context) --- src/otp/Erlang.fs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/otp/Erlang.fs b/src/otp/Erlang.fs index 42c37ff..d2715d3 100644 --- a/src/otp/Erlang.fs +++ b/src/otp/Erlang.fs @@ -123,6 +123,10 @@ let systemTime (unit: Atom) : int = nativeOnly [] let systemTimeSec () : int = nativeOnly +/// Hash a term to a value in [0, Range). Useful for partitioning or load balancing. +[] +let phash2 (term: obj) (range: int) : int = nativeOnly + /// Schedule a message to be sent to self after Ms milliseconds. [] let sendAfter (ms: int) (msg: obj) : TimerRef = nativeOnly