<p>I have a custom action in a workflow and would like to report an error to the user when something goes wrong.  What's the best way of doing that?</p>

<p><strong>UPD:</strong> Ideally I would like to put the workflow in the error state and log a message to the workflow log.  That doesn't seem possible.  What's the closest I can get to it? I want to a reusable solution,something that's easy for users to set up when using my custom action in SharePoint Designer.</p>

<hr>

<p>Added more details to the question.</p>

<p>@mauro that takes care of storing the error, but how do I display the error to the user in a way which makes sense?</p>

<p>@AdamSane That's seems like a rather fragile solution.  It's not a matter of setting this up once on a single site.  I need something others can add using SPD.</p>

Add the error to a hidden list with that users name. Set the visibility on the list (for users) to only read/write their own values. Then use a custom web part or FlexListViewer to view the contents of that list and display it to the user. Once they acknowledge that error, remove it from the list.
If necessary, you can add a different workflow action on that message list, that says pause for 2 days and then email. Whatever, depending on your requirements.
Otherwise you can have a custom db table that you use for pretty much the same thing, this way sharepoint does most of the work for you.
Update
This can be packaged up as a feature and deployed to each site as needed. The strengths of this approach (adding a list item to a list, querying, alerting a user, and emailing a user) are all built into the sharepoint itself. In this case you can focus on your custom logic only, while letting sharepoint focus on the implementation details.