When a symbol is evaluated, it is resolved in the current binding context unless you explicitly prevent evaluation using quote
or its shorthand '
.
e.g.:
(def foo-log 42)
(log-name foo)
;; CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo in this context, compiling:(/tmp/form-init735849253251327390.clj:1:1)
(log-name 'foo)
=> foo-log
(eval (log-name 'foo))
=> 42
You can write a macro, where the parameter list is not evaluated and return the created symbol for evaluation.
(defmacro log-name-macro
[channel-name]
(log-name channel-name))
(log-name-macro foo)
=> 42
In your example, you would now be required to write log-put
as a macro.
I don't recommend this approach to solving your problem at all.