Logging to file
This example shows how to print logs to file. It shows how to use the
FileCallbackHandler
, which does the same thing as
StdOutCallbackHandler
,
but instead writes the output to file. It also uses the loguru
library
to log other outputs that are not captured by the handler.
from langchain.callbacks import FileCallbackHandler
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from loguru import logger
logfile = "output.log"
logger.add(logfile, colorize=True, enqueue=True)
handler = FileCallbackHandler(logfile)
llm = OpenAI()
prompt = PromptTemplate.from_template("1 + {number} = ")
# this chain will both print to stdout (because verbose=True) and write to 'output.log'
# if verbose=False, the FileCallbackHandler will still write to 'output.log'
chain = LLMChain(llm=llm, prompt=prompt, callbacks=[handler], verbose=True)
answer = chain.run(number=2)
logger.info(answer)
> Entering new LLMChain chain...
Prompt after formatting:
1 + 2 =
> Finished chain.
2023-06-01 18:36:38.929 | INFO | __main__:<module>:20 -
3
Now we can open the file output.log
to see that the output has been
captured.
!pip install ansi2html > /dev/null
from ansi2html import Ansi2HTMLConverter
from IPython.display import HTML, display
with open("output.log", "r") as f:
content = f.read()
conv = Ansi2HTMLConverter()
html = conv.convert(content, full=True)
display(HTML(html))
> Entering new LLMChain chain... Prompt after formatting: 1 + 2 = > Finished chain. 2023-06-01 18:36:38.929 | INFO | __main__:<module>:20 - 3